numpy基础--通用函数:快速的元素级数组函数
以下代码的前提:import numpy as np
通用函数(即ufunc)是一种对narray中的数组执行元素级运算的函数。可以看作简单函数(接受一个或多个标量值,并产生一个或多个标量值)的矢量化包装器。
官方说明文档:Universal functions (ufunc) — NumPy v1.21 Manual
1.1 一元ufunc(接受1个数组)
输入参数为一个数组,输出一个数组。举例进行说明:
numpy.sqrt方法,对数组的每个元素的进行开方;numpy.sqrt — NumPy v1.21 Manual
numpy.exp方法,对数组的每个元素进行以e为底的指数运算。numpy.exp — NumPy v1.21 Manual
numpy.exp2方法,对数组的每个元素进行以2为底的指数运算。
numpy.square方法,对数组的每个元素进行平方运算。
还有许多其它的运算,可参考官方文档:Universal functions (ufunc) — NumPy v1.21 Manual
1 >>> arr = np.arange(10)
2 >>> np.sqrt(arr)
3 array([0. , 1. , 1.41421356, 1.73205081, 2. ,
4 2.23606798, 2.44948974, 2.64575131, 2.82842712, 3. ])
5 >>>
6 >>> np.exp(arr)
7 array([1.00000000e+00, 2.71828183e+00, 7.38905610e+00, 2.00855369e+01,
8 5.45981500e+01, 1.48413159e+02, 4.03428793e+02, 1.09663316e+03,
9 2.98095799e+03, 8.10308393e+03])
>>> x = [1, 2, 3]
>>> x = array([1, 2, 3])
>>> x
array([1, 2, 3])
>>> y = np.exp2(x)
>>> y
array([2., 4., 8.])
>>> z = np.square(x)
>>> z
array([1, 4, 9], dtype=int32)
1.2 二元ufunc(接受2个数组)
接受两个数组作为输入变量,返回一个数组。举例进行说明:
numpy.maximum方法,数组元素逐个进行比较,返回最大值;
numpy.minimum方法,数组元素逐个进行比较,返回最小值;
numpy.add方法,数组元素逐个相加;
numpy.subtract方法,数组元素逐个相减。
其它运算参考官网:Universal functions (ufunc) — NumPy v1.21 Manual
1 >>> x = np.random.randn(8)
2 >>> y = np.random.randn(8)
3 >>> x
4 array([ 0.43266866, 1.69407984, -0.55230851, 0.5299432 , 0.16398048,
5 -0.85688016, 0.17670668, 0.27088301])
6 >>> y
7 array([-7.44071773e-01, -1.96733697e-01, 2.63125844e-01, 1.02443527e-03,
8 1.43143711e+00, 4.07087722e-02, 3.69629757e-01, 8.49162829e-01])
9 >>> np.maximum(x, y)
10 array([0.43266866, 1.69407984, 0.26312584, 0.5299432 , 1.43143711,
11 0.04070877, 0.36962976, 0.84916283])
array([1, 2, 3])
>>> y = array([2, 3, 4])
>>> np.add(x, y)
array([3, 5, 7])
>>> np.subtract(x, y)
array([-1, -1, -1])
1.3 ufunc返回多个数组
如numpy.modf方法,将数组的小数部分和整数部分以两个独立数组的形式返回。
1 >>> arr = np.random.randn(7) * 5
2 >>> arr
3 array([-5.13857878, -0.91271076, 3.55618943, -3.40179856, -7.32568638,
4 -1.74803645, 3.1201454 ])
5 >>> np.modf(arr)
6 (array([-0.13857878, -0.91271076, 0.55618943, -0.40179856, -0.32568638,
7 -0.74803645, 0.1201454 ]), array([-5., -0., 3., -3., -7., -1., 3.]))
8 >>>
1.4 常用一元ufunc和二元ufunc函数
一元ufunc | |
---|---|
函数 | 说明 |
abs、fabs | 计算整数、浮点数或复数的绝对值。对于非复数值,可以使用更快的fabs |
sqrt | 计算各元素的平方根,相当于arr ** 0.5 |
square | 计算各元素的平方,相当于arr ** 2 |
exp | 计算各元素的指数ex |
log、log10、log2、log1p | 分别为自然对数(底数为e)、底数为10的log、底数为2的log、log(1+x) |
sign | 计算各元素的正负号:1(正数)、0(零)、-1(负数) |
ceil | 计算各元素的ceiling值,即大于等于该值的最小整数 |
floor | 计算各元素的floor值,即小于等于该值的最大整数 |
rint | 将各元素值四舍五入到最接近的整数,保留dtype |
modf | 将数组的小数部分和整数部分以两个独立数组的形式返回 |
isnan | 返回一个表示“哪些值是NaN(这不是一个数字)”的布尔型数组 |
isfinite、isinf | 分别返回一个表示“哪些元素是有穷的(非inf,非NaN)”或“哪些元素是无穷的”的布尔型数组 |
cos、cosh、sin、sinh、tan、tanh | 普通型和双曲型三角函数 |
arccos、arccosh、arcsin、arcsinh、arctan、arctanch | 反三角函数 |
logical_not | 计算各元素not x的真值,相当于~arr |
二元ufunc | |
add | 将数组中对应元素相加 |
subtract | 从第一个数组中减去第二个数组中的元素 |
multiply | 数组元素相乘 |
divide、floor_divide | 除法或向下圆整除法(丢弃余数) |
power | 对第一个数组中的元素A,根据第二个数组中的相应元素B,计算AB |
maximum、fmax | 元素级的最大值计算,fmax将忽略NaN |
minimum、fmin | 元素级的最小值计算,fmin将忽略NaN |
mod | 元素级的求模运算(除法的余数) |
copysign | 将第二个数组中的值的符号复制给第一个数组中的值 |
greater、greater_equal、less、less_equal、equal、not_equal | 执行元素级的比较运算,最终产生布尔型数组。相当于中缀运算符>、>=、<、<=、==、!= |
logic_and、logic_or、logic_xor | 执行元素级的真值逻辑运算,相当于中缀运算符&、|、^ |