Python / Numpy 二元函数

Numpy 二元函数

通用函数中,接受两个标量值、并产生一个或多个标量值的情况,这里称之为二元函数。

常用的二元函数,包括算术运算、比较级运算、求余数等。

1. 常用算术运算

1.1 四则运算

当对两个数组进行四则运算,可以通过运算函数完成,需要注意的是数组必须具有相同的形状或符合数组广播规则。

四则运算具体函数说明如下:

函数 说明
add 加法运算
subtract 减法运算,从第一个数组中减去第二个数组
multiply 数组元素相乘
divide 除法运算

案例

创建 2 个数组:

arr0 = np.array([1,2,3,4,5])
arr1 = np.array([10,20,30,40,50])

观察四则运算的调用方法和运算结果。

数组相加:

np.add(arr0, arr1)
out:
    array([11, 22, 33, 44, 55])

数组相减:

np.subtract(arr0, arr1)
out:
    array([ -9, -18, -27, -36, -45])

数组相乘:

np.multiply(arr0, arr1)
out:
    array([ 10,  40,  90, 160, 250])

数组相除:

np.divide(arr0, arr1)
out:
    array([0.1, 0.1, 0.1, 0.1, 0.1])

1.2 求幂运算

numpy.power() 函数将第一个输入数组中的元素作为底数,计算它与第二个输入数组中相应元素的幂。

案例

对 arr0 数组的元素,求三次方:

np.power(arr0, 3)
out:
    array([  1,   8,  27,  64, 125], dtype=int32)

当输入的第二个参数是数组类型时,power 函数会对第一个数组中的元素(记为A),根据第二个数组中对应的元素 B,计算 AB

np.power(arr1, arr0)
out:
    array([       10,       400,     27000,   2560000, 312500000], dtype=int32)

1.3 求余数

numpy.mod() 函数,是元素级的求余数计算,传参方式跟 power 函数类似。

案例

对 arr0 数组的元素,求 2 的余数:

np.mod(arr0, 2)
out:
    array([1, 0, 1, 0, 1], dtype=int32)

类似地,对 arr1 数组中的元素,分别对 arr0 数组的元素,求余数:

np.mod(arr1, arr0)
out:
    array([0, 0, 0, 0, 0], dtype=int32)

2. 比较运算

2.1 最大最小值计算

函数 说明
maximum、fmax 元素级的最大值计算,fmax将忽略NaN
minimum、fmin 元素级的最小值计算,fmin将忽略NaN

案例

计算 arr0 和 arr1 之间的最大值:

np.maximum(arr0, arr1)
out:
    array([10, 20, 30, 40, 50])

计算 arr0 和 arr1 之间的最小值:

np.minimum(arr0, arr1)
out:
    array([1, 2, 3, 4, 5])

需要注意的是,如果数组中间存在空值,需要用 fmax 或 fmin 函数,否则会报 ValueError 的错误。

2.2 比较运算

执行元素级的比较运算,最终产生一个布尔型数组。常用的比较运算有:

函数 说明
greater、greater_equal 相当于运算符:>、≥
less、less_equal 相当于运算符:<、≤
equal、not_equal 相当于运算符:==、!=

案例

比较级可以使用在数组与标量之间:

np.greater(arr0, 3)
out:
    array([False, False, False,  True,  True])

比较级也可以使用在两个数组之间:

np.not_equal(arr0, arr1)
out:
    array([ True,  True,  True,  True,  True])

3. 小结

本节介绍了常用的二元函数,例如:算术运算、比较级运算等。需要注意的是,二元函数不仅仅可以接受两个数组,在广播规则生效的情况下,也可以同时传入数组和标量。