17. NumPy算术运算
1. 前言
NumPy 数组的“加减乘除”算术运算,分别对应 add()、subtract()、multiple() 以及 divide() 函数。
注意:做算术运算时,输入数组必须具有相同的形状,或者符合数组的广播规则,才可以执行运算。
下面看一组示例:
import numpy as np a = np.arange(9, dtype = np.float_).reshape(3,3) #数组a print(a) #数组b b = np.array([10,10,10]) print(b) #数组加法运算 print(np.add(a,b)) #数组减法运算 print(np.subtract(a,b)) #数组乘法运算 print(np.multiply(a,b)) #数组除法运算 print(np.divide(a,b))
输出结果:
a数组: [[ 0. 1. 2.] [ 3. 4. 5.] [ 6. 7. 8.]] b数组: [10 10 10] 加: [[ 10. 11. 12.] [ 13. 14. 15.] [ 16. 17. 18.]] 减: [[-10. -9. -8.] [ -7. -6. -5.] [ -4. -3. -2.]] 乘: [[ 0. 10. 20.] [ 30. 40. 50.] [ 60. 70. 80.]] 除: [[ 0. 0.1 0.2] [ 0.3 0.4 0.5] [ 0.6 0.7 0.8]]
下面介绍了 NumPy 中其他重要的算术运算函数。
2. numpy.reciprocal()
该函数对数组中的每个元素取倒数,并以数组的形式将它们返回。
当数组元素的数据类型为整型(int)时,对于绝对值小于 1 的元素,返回值为 0,而当数组中包含 0 元素时,返回值将出现 overflow(inf) 溢出提示,示例如下:
import numpy as np #注意此处有0 a = np.array([0.25, 1.33, 1, 0, 100]) #数组a默认为浮点类型数据 print(a) #对数组a使用求倒数操作 print (np.reciprocal(a)) #b数组的数据类型为整形int b = np.array([100], dtype = int) print(b) #对数组b使用求倒数操作 print( np.reciprocal(b) )
输出结果:
a数组: [ 0.25 1.33 1. 0. 100. ] 对a数组求倒数有inf提示: __main__:1: RuntimeWarning: divide by zero encountered in reciprocal [ 4. 0.7518797 1. inf 0.01 ] b数组: [100] 对b数组求倒数: [0]
3. numpy.power()
该函数将 a 数组中的元素作为底数,把 b 数组中与 a 相对应的元素作幂 ,最后以数组形式返回两者的计算结果。示例如下:
import numpy as np a = np.array([10,100,1000]) #a数组 print ('我们的数组是;') #调用 power 函数 print (np.power(a,2)) b数组 b = np.array([1,2,3]) print (b) 调用 power 函数 print (np.power(a,b))
输出结果:
a数组是: [ 10 100 1000] 调用 power 函数: [ 100 10000 1000000] b数组: [1 2 3] 调用 power 函数: [ 10 10000 1000000000]
4. numpy.mod()
返回两个数组相对应位置上元素相除后的余数,它与 numpy.remainder() 的作用相同 。
import numpy as np a = np.array([11,22,33]) b = np.array([3,5,7]) #a与b相应位置的元素做除法 print( np.mod(a,b)) #remainder方法一样 print(np.remainder(a,b))
输出结果:
mod: [1 0 2] remainder: [1 0 2]
5. 复数数组处理函数
NumPy 提供了诸多处理复数类型数组的函数,主要有以下几个:
- numpy.real() 返回复数数组的实部;
- numpy.imag() 返回复数数组的虚部;
- numpy.conj() 通过更改虚部的符号,从而返回共轭复数;
- numpy.angle() 返回复数参数的角度,该函数的提供了一个 deg 参数,如果 deg=True,则返回的值会以角度制来表示,否则以以弧度制来表示。
示例如下所示:
import numpy as np a = np.array([-5.6j, 0.2j, 11. , 1+1j]) print(a) #real() print np.real(a) #imag() print np.imag(a) #conj() print np.conj(a) #angle() print np.angle(a) #angle() 带参数deg print np.angle(a, deg = True)
输出结果:
a数组: [ 0.-5.6j 0.+0.2j 11.+0.j 1.+1.j ] real(): [ 0. 0. 11. 1.] imag(): [-5.6 0.2 0. 1. ] conj(): [ 0.+5.6j 0.-0.2j 11.-0.j 1.-1.j ] angle() : [-1.57079633 1.57079633 0. 0.78539816] angle(a,deg=True) [-90. 90. 0. 45.]