NumPy 数组的数学运算是 NumPy 中非常重要的一个特性。在 NumPy 中,数组可以进行一系列的数学运算,包括加减乘除、幂次方、三角函数、指数函数等。这些数学运算可以对整个数组进行操作,也可以对数组中的每个元素进行操作。下面就对 NumPy 数组的数学运算进行详细介绍。
NumPy四则运算
NumPy 数组的加减乘除运算与 Python 中的运算是类似的,可以使用 +、-、*、/ 运算符进行运算。需要注意的是,这些运算符作用于数组时,是逐元素进行运算的。下面是一些例子:
import numpy as np
# 加减乘除运算
a = np.array([1, 2, 3])
b = np.array([4, 5, 6])
c = a + b # [5 7 9]
d = a - b # [-3 -3 -3]
e = a * b # [4 10 18]
f = b / a # [4. 2.5 2. ]
幂次方运算
NumPy 中的幂次方运算使用 ** 运算符,也可以使用 np.power() 函数进行运算。下面是一些例子:
# 幂次方运算
a = np.array([2, 3, 4])
b = a ** 2 # [ 4 9 16]
c = np.power(a, 3) # [ 8 27 64]
三角函数和指数函数
NumPy 中包括了一系列的三角函数和指数函数,这些函数都可以对数组进行操作。
下面是一些例子:
# 三角函数和指数函数
a = np.array([0, np.pi/2, np.pi])
b = np.sin(a) # [0.0000000e+00 1.0000000e+00 1.2246468e-16]
c = np.cos(a) # [ 1.000000e+00 6.123234e-17 -1.000000e+00]
d = np.tan(a) # [ 0.00000000e+00 1.63312394e+16 -1.22464680e-16]
e = np.exp(a) # [ 1. 4.48168907 23.14069263]
除此之外,还有以下三角函数:
- np.arcsin(x):逐元素计算反正弦值。
- np.arccos(x):逐元素计算反余弦值。
- np.arctan(x):逐元素计算反正切值。
- np.sinh(x):逐元素计算双曲正弦值。
- np.cosh(x):逐元素计算双曲余弦值。
- np.tanh(x):逐元素计算双曲正切值。
- np.arcsinh(x):逐元素计算反双曲正弦值。
- np.arccosh(x):逐元素计算反双曲余弦值。
- np.arctanh(x):逐元素计算反双曲正切值。
使用代码如下:
import numpy as np
a = np.array([0, np.pi/4, np.pi/2])
print(np.arcsin(a)) # [0. 0.90333911 nan]
print(np.arccos(a)) # [1.57079633 0.66745722 nan]
print(np.arctan(a)) # [0. 0.66577375 1.00388482]
print(np.sinh(a)) #[0. 0.86867096 2.3012989 ]
...
数组逻辑运算
NumPy 中的逻辑运算主要包括以下几种:
- np.logical_and(x1, x2, ...):逐元素进行逻辑 AND 操作。
- np.logical_or(x1, x2, ...):逐元素进行逻辑 OR 操作。
- np.logical_not(x):逐元素进行逻辑 NOT 操作。
- np.logical_xor(x1, x2, ...):逐元素进行逻辑 XOR 操作。
示例代码:
import numpy as np
a = np.array([True, True, False, False])
b = np.array([True, False, True, False])
print(np.logical_and(a, b)) # [ True False False False]
print(np.logical_or(a, b)) # [ True True True False]
print(np.logical_not(a)) # [False False True True]
print(np.logical_xor(a, b)) # [False True True False]
NumPy数组的代数运算
NumPy数组除了常用的数学运算,还支持代数运算,包括向量的点积、叉积、矩阵的乘法、求逆等。下面分别介绍这些运算。
向量的点积(dot product)
向量的点积是指两个向量对应位置的数相乘之后求和的结果。在NumPy中,可以使用numpy.dot()函数计算两个向量的点积。例如:
import numpy as np
a = np.array([1, 2, 3])
b = np.array([4, 5, 6])
c = np.dot(a, b)
print(c) # 32
向量的叉积(cross product)
向量的叉积是指两个向量所在平面的法向量。在NumPy中,可以使用numpy.cross()函数计算两个向量的叉积。注意,这个函数只能计算三维向量的叉积。例如:
import numpy as np
a = np.array([1, 2, 3])
b = np.array([4, 5, 6])
c = np.cross(a, b)
print(c) # [-3 6 -3]
矩阵的乘法(matrix multiplication)
矩阵的乘法是指两个矩阵的乘积。在NumPy中,可以使用numpy.matmul()函数或者@运算符计算两个矩阵的乘积。例如:
import numpy as np
a = np.array([[1, 2], [3, 4]])
b = np.array([[5, 6], [7, 8]])
c = np.matmul(a, b)
print(c) # [[19 22]
# [43 50]]
矩阵的逆(matrix inverse)
矩阵的逆是指一个矩阵与它的逆矩阵相乘等于单位矩阵。在NumPy中,可以使用numpy.linalg.inv()函数计算矩阵的逆。例如:
import numpy as np
a = np.array([[1, 2], [3, 4]])
a_inv = np.linalg.inv(a)
print(a_inv) # [[-2. 1. ]
# [ 1.5 -0.5]]
需要注意的是,只有可逆矩阵才有逆矩阵。如果矩阵不可逆,numpy.linalg.inv()函数会抛出LinAlgError异常。
NumPy数组的统计函数
NumPy提供了很多数组的统计函数,用于计算数组的各种统计信息,比如最大值、最小值、均值、标准差、方差、中位数、百分位数等等。这些函数广泛应用于数据分析、机器学习等领域。
下面介绍一些常用的NumPy数组统计函数:
-
np.max(): 计算数组的最大值。
-
np.min(): 计算数组的最小值。
-
np.mean(): 计算数组的均值。
-
np.median(): 计算数组的中位数。
-
np.std(): 计算数组的标准差。
-
np.var(): 计算数组的方差。
-
np.percentile(): 计算数组的百分位数。
除了上述函数,NumPy还提供了一些其他的数组统计函数,比如np.sum()用于计算数组元素的总和,np.prod()用于计算数组元素的乘积,np.cumsum()用于计算数组元素的累计和,np.cumprod()用于计算数组元素的累计乘积等等。
这些函数的使用方法类似,都可以传入一个数组作为参数,例如:
import numpy as np
a = np.array([1, 2, 3, 4, 5])
print(np.max(a)) # 输出:5
print(np.mean(a)) # 输出:3.0
print(np.percentile(a, 50)) # 输出:3.0
还可以在函数中指定axis参数,计算数组沿指定轴的统计值,例如:
b = np.array([[1, 2, 3], [4, 5, 6], [7, 8, 9]])
print(np.max(b, axis=0)) # 输出:[7 8 9]
print(np.mean(b, axis=1)) # 输出:[2. 5. 8.]
上述代码中,np.max(b, axis=0)计算的是数组b沿着第0个轴的最大值,也就是每一列的最大值,结果是一个长度为3的数组;np.mean(b, axis=1)计算的是数组b沿着第1个轴的均值,也就是每一行的均值,结果是一个长度为3的数组。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:NumPy最常用数组的数学运算方法 - Python技术站