NumPy - 算术运算
NumPy 算术运算
NumPy 使对数组执行算术运算变得简单易行。使用 NumPy,您可以逐个元素对整个数组进行加、减、乘、除运算,这意味着一个数组中的每个元素都会被另一个数组中的对应元素运算。
在对不同形状的数组执行算术运算时,NumPy 使用一种称为"广播"的功能。它会自动调整数组的形状以便执行运算,并根据需要将较小的数组扩展到较大的数组。
NumPy 基本算术运算
NumPy 提供了几种对数组逐个元素执行的算术运算。这些运算包括加法、减法、乘法、除法和幂运算。
NumPy 数组加法
NumPy 中的加法是逐元素执行的。当两个相同形状的数组相加时,相应的元素会被相加。当数组具有不同形状时,广播规则适用 -
import numpy as np # 创建两个数组 a = np.array([1, 2, 3]) b = np.array([4, 5, 6]) # 数组相加 result = a + b print(result)
以下是得到的输出 -
[5 7 9]
NumPy 数组减法
NumPy 中的减法也是逐元素的。将两个形状相同的数组相减,返回一个数组,其中每个元素等于输入数组中对应元素的差值 -
import numpy as np # 创建两个数组 a = np.array([10, 20, 30]) b = np.array([1, 2, 3]) # 数组相减 result = a - b print(result)
这将产生以下结果 -
[ 9 18 27]
NumPy 数组乘法
在 NumPy 中使用 * 运算符执行元素级乘法。数组相乘时,第一个数组的每个元素都会与第二个数组中对应的元素相乘 -
import numpy as np # 创建两个数组 a = np.array([1, 2, 3]) b = np.array([4, 5, 6]) # 数组相乘 result = a * b print(result)
以下是上述代码的输出 -
[ 4 10 18]
NumPy 数组除法
在 NumPy 中,除法是使用 / 运算符逐个元素执行的。结果是一个数组,其中每个元素都是输入数组中对应元素的商 - ...
[10. 10. 6.]
NumPy 数组幂运算
幂运算是使用 NumPy 中的 ** 运算符逐个元素执行的。将基数组的每个元素提升为指数数组中相应元素的幂 -
import numpy as np # 创建两个数组 a = np.array([2, 3, 4]) b = np.array([1, 2, 3]) # 执行幂运算 result = a ** b print(result)
执行上述代码后,我们得到以下输出 -
[ 2 9 64]
我们还可以使用 numpy.power() 函数将数组元素提升到指定的幂。此函数将第一个输入数组中的元素作为基数,并返回其第二个输入数组中对应元素的幂 -
import numpy as np a = np.array([10,100,1000]) print ('我们的数组是:') print (a) print (' ') print ('应用幂函数:') print (np.power(a,2)) print (' ') print ('第二个数组:') b = np.array([1,2,3]) print (b) print (' ') print ('再次应用幂函数:') print (np.power(a,b))
它将产生以下输出 -
我们的数组是: [ 10 100 1000] 应用幂函数: [ 100 10000 1000000] 第二个数组: [1 2 3] 再次应用幂函数: [ 10 10000 1000000000]
NumPy 高级算术运算
NumPy 中的高级算术运算包括模、地板除法和幂等运算。这些运算可以处理更复杂的数学任务,并且以元素为单位执行,类似于基本算术运算,但具有模运算和指数运算的附加功能。
NumPy 模运算
模运算在 NumPy 中使用 % 运算符执行。当应用于数组时,它会按元素进行运算,即用第一个数组中的每个元素除以第二个数组中对应的元素,然后计算余数 -
import numpy as np # 创建两个数组 a = np.array([10, 20, 30]) b = np.array([3, 7, 8]) # 应用模运算 result = a % b print(result)
结果如下 -
[1 6 6]
我们还可以使用 numpy.mod() 函数来计算两个数组元素之间或一个数组和一个数组元素之间除法(模运算)的元素余数。标量。
此函数返回一个数组除以另一个数组或标量后的余数,并逐个元素应用模运算。
import numpy as np a = np.array([10,20,30]) b = np.array([3,5,7]) print ('第一个数组:') print (a) print (' ') print ('第二个数组:') print (b) print (' ') print ('调用 mod() 函数:') print (np.mod(a,b)) print (' ') print ('调用 remainder() 函数:') print (np.remainder(a,b))
以下是上述代码的输出 −
第一个数组: [10 20 30] 第二个数组: [3 5 7] 调用 mod() 函数: [1 0 2] 调用 remainder() 函数: [1 0 2]
NumPy 向下取整除
NumPy 中的向下取整除是使用 // 运算符逐个元素执行的。返回小于或等于除法结果的最大整数 -
import numpy as np # 创建两个数组 a = np.array([10, 20, 30]) b = np.array([3, 7, 8]) # 应用向下取整除法 result = a // b print(result)
我们得到如下所示的输出 -
[3 2 3]
使用广播进行 NumPy 算术运算
广播允许 NumPy 通过虚拟扩展较小数组以匹配较大数组的形状,对不同形状的数组执行算术运算。
NumPy 中的标量和数组运算NumPy
当标量与数组一起使用时,广播会扩展标量以匹配数组的形状,从而允许逐元素运算 -
import numpy as np # 创建数组 a = np.array([[1, 2, 3], [4, 5, 6]]) # 标量值 scalar = 10 # 将标量添加到数组 result = a + scalar print(result)
以下是获得的输出 -
[[11 12 13] [14 15 16]]
NumPy 中不同形状的数组
当两个不同形状的数组在 NumPy 中使用,广播会根据广播规则对齐数组的形状 -
import numpy as np # 创建不同形状的数组 a = np.array([[1, 2, 3], [4, 5, 6]]) b = np.array([10, 20, 30]) # 添加数组 result = a + b print(result)
这将产生以下结果 -
[[11 22 33] [14 25 36]]
NumPy 聚合函数
NumPy 中的聚合函数通常会对数组执行求和、求平均值、求最小值和求最大值等操作。使用广播处理不同形状的数组。
NumPy 求和运算
NumPy 求和运算计算指定轴上数组元素的总和;如果未指定轴,则计算整个数组元素的总和。 −
import numpy as np # 创建数组 a = np.array([[1, 2, 3], [4, 5, 6]]) # 对元素求和 result = np.sum(a) print(result) # 沿轴 0(列)求和 result_axis0 = np.sum(a, axis=0) print(result_axis0) # 沿轴 1(行)求和 result_axis1 = np.sum(a, axis=1) print(result_axis1)
以下是上述代码的输出 −
21 [5 7 9] [ 6 15]
NumPy 均值运算
NumPy 均值运算计算数组元素在指定轴或整个数组上的平均值(算术平均值)-
import numpy as np # 创建数组 a = np.array([[1, 2, 3], [4, 5, 6]]) # 元素平均值 result = np.mean(a) print(result) # 沿轴 0(列)的平均值 result_axis0 = np.mean(a, axis=0) print(result_axis0) # 沿轴 1(行)的平均值 result_axis1 = np.mean(a, axis=1) print(result_axis1)
得到的输出如下所示 -
3.5 [2.5 3.5 4.5] [2. 5.]
NumPy 数组与复数运算
以下函数用于对包含复数的数组执行运算。
numpy.real(): 返回复数数据类型参数的实部。
numpy.imag(): 返回复数数据类型参数的虚部。
numpy.conj(): 返回复数共轭,该共轭是通过改变虚部的符号获得的。
numpy.angle(): 返回复数参数的角度。该函数包含 degree 参数。如果为真,则返回以度为单位的角度,否则返回以弧度为单位的角度。
示例
在下面的示例中,我们使用 NumPy 函数:real()、imag()、conj() 和 angle() 对复数数组执行运算 -
import numpy as np a = np.array([-5.6j, 0.2j, 11. , 1+1j]) print ('我们的数组是:') print (a) print (' ') print ('调用 real() 函数:') print (np.real(a)) print (' ') print ('调用 imag() 函数:') print (np.imag(a)) print (' ') print ('调用 conj() 函数:') print (np.conj(a)) print (' ') print ('调用 angle() 函数:') print (np.angle(a)) print (' ') print ('再次调用 angle() 函数(结果以度为单位)') print (np.angle(a, deg = True))
它将产生以下输出 -
我们的数组是: [ 0.-5.6j 0.+0.2j 11.+0.j 1.+1.j ] 调用 real() 函数: [ 0. 0. 11. 1.] 调用 imag() 函数: [-5.6 0.2 0. 1. ] 调用 conj() 函数: [ 0.+5.6j 0.-0.2j 11.-0.j 1.-1.j ] 调用 angle() 函数: [-1.57079633 1.57079633 0. 0.78539816] 再次调用 angle() 函数(结果以度为单位) [-90. 90. 0. 45.]
基本数组运算
NumPy 包中提供了一些用于数组元素运算的例程。NumPy 数组支持加法、减法和索引等运算,以实现高效的数据操作 -
Sr.No. | 操作 &说明 |
---|---|
1 |
numpy.add()
启用高效的逐元素加法进行数据操作。 |
2 |
numpy.subtract()
高效计算两个数组之间的逐元素差。 |
3 |
numpy.multiply()
计算两个数组之间的逐元素乘积高效。 |
4 |
numpy.divide()
执行逐元素除法,需要非零且形状相同的数组。 |
5 |
numpy.power()
将一个数组的元素逐个提升到另一个数组的元素。 |
6 |
numpy.mod()
计算两个数组之间逐元素除法的余数数组。 |
7 |
numpy.remainder()
计算两个数组之间逐元素的除法余数。 |
8 |
numpy.divmod()
返回一个包含商和余数的元组。 |
7 |
numpy.abs()
返回数字。 |
8 |
numpy.absolute()
高效计算每个数组元素的绝对值。 |
9 |
numpy.fabs()
返回正值。 |
10 |
numpy.sign()
返回数字符号的元素级指示。 |
11 |
numpy.conj()
返回按元素计算的复共轭值。 |
12 |
numpy.exp()
计算输入数组中所有元素的指数。 |
13 |
numpy.expm1()
计算数组中所有元素的 exp(x)-1。 |
14 |
numpy.log()
自然对数,逐元素。 |
15 |
numpy.log1p()
计算 (1 + 输入数组) 的逐元素自然对数。 |
16 |
numpy.log2()
x 的以 2 为底的对数。 |
17 |
numpy.log10()
返回输入数组的以 10 为底的对数,按元素排序。 |
18 |
numpy.sqrt()
按元素返回数组的非负平方根。 |
19 |
numpy.square()
按元素返回输入的平方。 |
20 |
numpy.cbrt()
按元素返回数组的立方根。 |
21 |
numpy.reciprocal()
计算数组中每个元素的倒数。 |