通用函数,也可以称为ufunc,是一种在ndarray数据中进行逐元素操作的函数。某些简单函数接收一个或多个标量数值,并产生一个或多个标量结果,通用函数就是对这些简单函数的向量化封装。
有很多ufunc是简单的逐元素转换,比如sqrt或exp函数:
import numpy as np
arr = np.arange(10)
print(arr)
----------------------------------------------------
[0 1 2 3 4 5 6 7 8 9]
print(np.sqrt(arr))
----------------------------------------------------
[0. 1. 1.41421356 1.73205081 2. 2.23606798
2.44948974 2.64575131 2.82842712 3. ]
print(np.exp(arr))
----------------------------------------------------
[1.00000000e+00 2.71828183e+00 7.38905610e+00 2.00855369e+01
5.45981500e+01 1.48413159e+02 4.03428793e+02 1.09663316e+03
2.98095799e+03 8.10308393e+03]
这些就是所谓的一元通用函数。还有一些通用函数,比如add或maximum则则会接收两个数组并返回一个数组作为结果,因此称为二元通用函数:
x = np.random.randn(8)
y = np.random.randn(8)
print(x)
----------------------------------------------------
[1.01284295 0.51008843 0.13170168 0.29898903 0.52574663 1.37900118
0.56520683 0.73509518]
print(y)
----------------------------------------------------
[ 1.06017429 -0.18228358 -0.70774448 1.82603961 -0.62889984 -0.48199032
-2.47668062 0.65314373]
----------------------------------------------------
print(np.maximum(x,y))
[1.06017429 0.51008843 0.13170168 1.82603961 0.52574663 1.37900118
0.56520683 0.73509518]
这里,numpy.maximum逐个元素地将x和y中元素的最大值给计算出来。
也有一些通用函数返回多个数组。比如modf,是python内建函数divmod的向量化版本。它返回一个浮点值数组的小数部分和整数部分:
arr = np.random.rand(7) * 5
print(arr)
----------------------------------------------------
[3.74045832 4.83364 2.70811033 4.99247033 3.82438603 4.54268595
1.00967246]
remainder,whole_part = np.modf(arr)
print(remainder)
----------------------------------------------------
[0.74045832 0.83364 0.70811033 0.99247033 0.82438603 0.54268595
0.00967246]
print(whole_part)
----------------------------------------------------
[3. 4. 2. 4. 3. 4. 1.]
表1-1:一元通用函数
函数名 | 描述 |
---|---|
abs、fabs | 逐元素地计算整数、浮点数或复数的值 |
square | 计算每个元素的平方 |
sign | 计算每个元素的符号值:1(正数)、0(0)、-1(负数) |
ceil | 计算大于等于给定数值的最小整数 |
floor | 计算小于等于给定数值的最大整数 |
rint | 将元素保留到整数位,并保持dtype |
modf | f分别将数组的小数部分和整数部分按数组形式返回 |
isnan | 返回数组中的元素是否是一个NaN,形式为布尔值数组 |
log、log10、log2、log1p | 分别对应:自然对数为底,对数10为底,对数2为底,log(1+x) |
表1-2:二元通用函数
函数名 | 描述 |
---|---|
add | 将数组的对应元素相加 |
subtract | 在第二个数组中,将第一个数组中包含的元素去除 |
multiply | 将数组的对应元素相乘 |
divide,floor_divide | 除或整除(放弃余数) |
power | 将第二个数组的元素作为第一个数组对应元素的幂次方 |
maximum,fmax | 逐个元素计算最大值,fmax忽略NaN |
minimum,fmin | 逐个元素计算最小值,fmin忽略NaN |
mod | 即求除法的余数 |