三角函数
首先, 看一看 numpy 提供的三角函数功能。这些方法有:
sin(x)
:三角正弦。cos(x)
:三角余弦。tan(x)
:三角正切。arcsin(x)
:三角反正弦。arccos(x)
:三角反余弦。arctan(x)
:三角反正切。hypot(x1,x2)
:直角三角形求斜边。degrees(x)
:弧度转换为度。radians(x)
:度转换为弧度。deg2rad(x)
:度转换为弧度。rad2deg(x)
:弧度转换为度。
比如,我们可以用上面提到的 rad2deg(x)
将弧度转换为度。
import numpy as np
np.rad2deg(np.pi)
这些函数非常简单,就不再一一举例了。
双曲函数
在数学中,双曲函数是一类与常见的三角函数类似的函数。双曲函数经常出现于某些重要的线性微分方程的解中,使用 numpy 计算它们的方法为:
sinh(x)
:双曲正弦。cosh(x)
:双曲余弦。tanh(x)
:双曲正切。arcsinh(x)
:反双曲正弦。arccosh(x)
:反双曲余弦。arctanh(x)
:反双曲正切。
数值修约
数值修约, 又称数字修约, 是指在进行具体的数字运算前, 按照一定的规则确定一致的位数, 然后舍去某些数字后面多余的尾数的过程[via. 维基百科]。比如, 我们常听到的「4 舍 5 入」就属于数值修约中的一种。
around(a)
:平均到给定的小数位数。round_(a)
:将数组舍入到给定的小数位数。rint(x)
:修约到最接近的整数。fix(x, y)
:向 0 舍入到最接近的整数。floor(x)
:返回输入的底部(标量 x 的底部是最大的整数 i)。ceil(x)
:返回输入的上限(标量 x 的底部是最小的整数 i).trunc(x)
:返回输入的截断值。
随机选择几个浮点数,看一看上面方法的区别。
>>> import numpy as np
>>> a = np.array([1.21, 2.53, 3.86])
>>> a
array([ 1.21, 2.53, 3.86])
>>> np.around(a)
array([ 1., 3., 4.])
>>> np.round_(a)
array([ 1., 3., 4.])
>>> np.rint(a)
array([ 1., 3., 4.])
>>> np.fix(a)
array([ 1., 2., 3.])
>>> np.floor(a)
array([ 1., 2., 3.])
>>> np.ceil(a)
array([ 2., 3., 4.])
>>> np.trunc(a)
array([ 1., 2., 3.])
求和、求积、差分
下面这些方法用于数组内元素或数组间进行求和、求积以及进行差分。
prod(a, axis, dtype, keepdims)
:返回指定轴上的数组元素的乘积。sum(a, axis, dtype, keepdims)
:返回指定轴上的数组元素的总和。nanprod(a, axis, dtype, keepdims)
:返回指定轴上的数组元素的乘积, 将 NaN 视作 1。nansum(a, axis, dtype, keepdims)
:返回指定轴上的数组元素的总和, 将 NaN 视作 0。cumprod(a, axis, dtype)
:返回沿给定轴的元素的累积乘积。cumsum(a, axis, dtype)
:返回沿给定轴的元素的累积总和。nancumprod(a, axis, dtype)
:返回沿给定轴的元素的累积乘积, 将 NaN 视作 1。nancumsum(a, axis, dtype)
:返回沿给定轴的元素的累积总和, 将 NaN 视作 0。diff(a, n, axis)
:计算沿指定轴的第 n 个离散差分。ediff1d(ary, to_end, to_begin)
:数组的连续元素之间的差异。gradient(f)
:返回 N 维数组的梯度。cross(a, b, axisa, axisb, axisc, axis)
:返回两个(数组)向量的叉积。trapz(y, x, dx, axis)
:使用复合梯形规则沿给定轴积分。
下面,我们选取几个举例测试一下:
>>> import numpy as np
>>> a=np.arange(5)
>>> a
array([0, 1, 2, 3, 4])
>>> np.prod(a) # 所有元素乘积
0
>>> np.sum(a) # 所有元素和
10
>>> np.nanprod(a) # 默认轴上所有元素乘积
0
>>> np.nansum(a) # 默认轴上所有元素和
10
>>> np.cumprod(a) # 默认轴上元素的累积乘积。
array([0, 0, 0, 0, 0])
>>> np.diff(a) # 默认轴上元素差分。
array([1, 1, 1, 1])
指数和对数
如果你需要进行指数或者对数求解,可以用到以下这些方法。
exp(x)
:计算输入数组中所有元素的指数。expm1(x)
:对数组中的所有元素计算 exp(x) - 1.exp2(x)
:对于输入数组中的所有 p, 计算 2 ** p。log(x)
:计算自然对数。log10(x)
:计算常用对数。log2(x)
:计算二进制对数。log1p(x)
:log(1 + x)
。logaddexp(x1, x2)
:log2(2**x1 + 2**x2)
。logaddexp2(x1, x2)
:log(exp(x1) + exp(x2))
。
算术运算
当然,numpy 也提供了一些用于算术运算的方法,使用起来会比 python 提供的运算符灵活一些,主要是可以直接针对数组。
add(x1, x2)
:对应元素相加。reciprocal(x)
:求倒数 1/x。negative(x)
:求对应负数。multiply(x1, x2)
:求解乘法。divide(x1, x2)
:相除 x1/x2。power(x1, x2)
:类似于 x1^x2。subtract(x1, x2)
:减法。fmod(x1, x2)
:返回除法的元素余项。mod(x1, x2)
:返回余项。modf(x1)
:返回数组的小数和整数部分。remainder(x1, x2)
:返回除法余数。
>>> import numpy as np
>>> a1 = np.random.randint(0, 10, 5)
>>> a2 = np.random.randint(0, 10, 5)
>>> a1
array([3, 7, 8, 0, 0])
>>> a2
array([1, 8, 6, 4, 4])
>>> np.add(a1, a2)
array([ 4, 15, 14, 4, 4])
>>> np.reciprocal(a1)
array([0, 0, 0, , ])
>>> np.negative(a1)
array([-3, -7, -8, 0, 0])
>>> np.multiply(a1, a2)
array([ 3, 56, 48, 0, 0])
>>> np.divide(a1, a2)
array([3, 0, 1, 0, 0])
>>> np.power(a1, a2)
array([3,5764801,262144,0,0])
>>> np.subtract(a1, a2)
array([ 2, -1, 2, -4, -4])
>>> np.fmod(a1, a2)
array([0, 7, 2, 0, 0])
>>> np.mod(a1, a2)
array([0, 7, 2, 0, 0])
>>> np.modf(a1)
(array([ 0., 0., 0., 0., 0.]), array([ 3., 7., 8., 0., 0.]))
>>> np.remainder(a1, a2)
array([0, 7, 2, 0, 0])
>>>
矩阵和向量积
求解向量、矩阵、张量的点积等同样是 numpy 非常强大的地方。
dot(a,b)
:求解两个数组的点积。vdot(a,b)
:求解两个向量的点积。inner(a,b)
:求解两个数组的内积。outer(a,b)
:求解两个向量的外积。matmul(a,b)
:求解两个数组的矩阵乘积。tensordot(a,b)
:求解张量点积。kron(a,b)
:计算 Kronecker 乘积。
其他
除了上面这些归好类别的方法,numpy 中还有一些用于数学运算的方法,归纳如下:
angle(z, deg)
:返回复参数的角度。real(val)
:返回数组元素的实部。imag(val)
:返回数组元素的虚部。conj(x)
:按元素方式返回共轭复数。convolve(a, v, mode)
:返回线性卷积。sqrt(x)
:平方根。cbrt(x)
:立方根。square(x)
:平方。absolute(x)
:绝对值, 可求解复数。fabs(x)
:绝对值。sign(x)
:符号函数。maximum(x1, x2)
:最大值。minimum(x1, x2)
:最小值。nan_to_num(x)
:用 0 替换 NaN。interp(x, xp, fp, left, right, period)
:线性插值。