发布时间:2023-06-24 09:30
ufunc
函数ufunc
函数即通用函数(universal function
),是一种能够对数组中的所有元素进行操作的函数。ufunc
函数是针对数组进行操作的,并且都以NumPy
数组作为输出,因此不需要对数组的每一个元素都进行操作。对一个数组进行重复运算时,使用ufunc
函数比使用math
库中的函数效率要高很多。
常用的ufunc
函数运算有四则运算、比较运算和逻辑运算等。
ufunc
函数支持全部的四则运算,并且保留习惯的运算符,和数值运算的使用方式一样(原理即运算符重载,比如列表+
运算),但是需要注意的是,操作的对象是数组。数组间的四则运算表示对每个数组中的元素分别进行四则运算,所以进行四则运算的两个数组的形状必须相同。
x = np.array([1,2,3])
y = np.array([4,5,6])
print('数组相加结果为:',x + y) #数组相加
print('数组相减结果为:',x - y) #数组相减
print('数组相乘结果为:',x * y) #数组相乘
print('数组相除结果为:',x / y) #数组相除
print('数组幂运算结果为:',x ** y) #数组幂运算
数组相加结果为: [5 7 9]
数组相减结果为: [-3 -3 -3]
数组相乘结果为: [ 4 10 18]
数组相除结果为: [0.25 0.4 0.5 ]
数组幂运算结果为: [ 1 32 729]
ufunc
中也可以用完整的比较运算:>
、<
、==
、>=
、<=
、!=
。
比较运算返回的结果是一个布尔数组,其每个元素为数组对应元素的比较结果。
x = np.array([1,3,5])
y = np.array([2,3,4])
print('数组比较结果为:',x < y)
print('数组比较结果为:',x > y)
print('数组比较结果为:',x == y)
print('数组比较结果为:',x >= y)
print('数组比较结果为:',x <= y)
print('数组比较结果为:',x != y)
数组比较结果为: [ True False False]
数组比较结果为: [False False True]
数组比较结果为: [False True False]
数组比较结果为: [False True True]
数组比较结果为: [ True True False]
数组比较结果为: [ True False True]
在NumPy逻辑运算中,np.all
函数表示逻辑and
,np.any
函数表示逻辑or
。
#np.all()表示逻辑and,对矩阵所有元素做与操作,所有为True则返回True
print('数组逻辑运算结果为:',np.all(x == y))
#np.any()表示逻辑or,对矩阵所有元素做或运算,存在True则返回True
print('数组逻辑运算结果为:',np.any(x == y))
数组逻辑运算结果为: False
数组逻辑运算结果为: True
广播(Broadcasting)是指不同形状的数组之间执行算术运算的方式。
当使用ufunc函数进行数组计算时,ufunc函数会对两个数组的对应元素进行计算。进行这种计算的前提是两个数组的shape一致。若两个数组的shape不一致,则NumPy会实行广播机制。NumPy中的广播机制并不容易理解,特别是在进行高维数组计算的时候。为了更好地使用广播机制,需要遵循4个原则。