NumPy - 数组减法
NumPy 数组减法
NumPy 数组减法允许您在数组之间执行逐元素减法。此运算将一个数组的对应元素从另一个相同形状的数组中减去,从而生成一个具有相同形状的新数组,并包含减去后的值。
如果两个数组的形状不同,NumPy 会在特定条件下广播较小的数组以匹配较大数组的形状。
NumPy 中的逐元素减法
逐元素减法是 NumPy 中最基本的数组减法形式,即将两个数组的对应元素相减,从而生成一个新数组。
这种减法运算针对相同形状的数组,对两个数组中的每对元素分别执行减法运算。
示例
在下面的示例中,我们将数组 a 中的每个元素从数组 a 的对应元素中减去 -
import numpy as np # 创建两个数组 a = np.array([5, 6, 7]) b = np.array([1, 2, 3]) # 执行逐元素减法 result = a - b print(result)
以下是得到的输出 -
[4 4 4]
从 NumPy 数组中减去标量
从数组中减去标量(单个值)时,标量会被广播以匹配数组的形状。这意味着标量实际上被当作与原始数组形状相同的数组来处理,所有元素都等于标量值。
广播解释了 NumPy 如何管理涉及不同形状数组的算术运算。当计算中使用不同形状的数组时,NumPy 会根据广播规则自动调整它们的形状以使其相互兼容。
示例
在此示例中,我们从数组"a"的每个元素中减去标量"10"-
import numpy as np # 创建数组 a = np.array([5, 6, 7]) # 减去标量 result = a - 2 print(result)
这将产生以下结果-
[3 4 5]
对不同形状的 NumPy 数组进行减法
NumPy 中的广播允许通过调整维度使不同形状的数组彼此匹配,从而实现减法运算。
NumPy 通过从最右侧比较并向左移动来对齐维度以进行广播。如果维度相等,或者一个维度为 1,则维度兼容,然后扩展该维度以匹配另一个维度。
当维度不直接对齐时,NumPy 会根据需要沿着不匹配的维度扩展较小的数组,以适应较大数组的形状。
示例
在下面的示例中,数组"b"被广播以匹配数组"a"的形状,然后执行逐元素减法 -
import numpy as np # 创建不同形状的数组 a = np.array([[5, 6, 7], [8, 9, 10]]) b = np.array([1, 2, 3]) # 使用广播对数组进行减法运算 result = a - b print(result)
以下是上述代码的输出 -
[[4 4 4] [7 7 7]]
使用广播对多维数组进行减法运算
在 NumPy 中,广播允许在不同形状的多维数组之间进行算术运算(例如减法),方法是自动扩展较小数组的维度以匹配较大数组的形状。
示例
在下面的示例中,我们广播一维数组数组"b"的维度与二维数组"a"的维度一致 -
import numpy as np # 创建多维数组 a = np.array([[10, 20, 30], [40, 50, 60]]) b = np.array([5, 15, 25]) # 使用广播对多维数组进行减法 result = a - b[np.newaxis, :] print(result)
输出结果如下 -
[[ 5 15 25] [25 35 45]]
使用广播函数进行减法
广播NumPy 不仅允许直接进行逐元素算术运算,而且还支持将函数应用于不同形状的数组。通过广播,您可以对不同形状的数组使用各种数学函数。
示例
在此示例中,我们从数组"a"的每个元素中减去标量"5",然后逐个元素应用"sine"函数 -
import numpy as np # 创建数组 a = np.array([10, 20, 30]) # 使用广播应用函数 result = np.sin(a - 5) print(result)
执行上述代码后,我们得到以下输出 -
[-0.95892427 -0.7568025 0.14112001]
减去不兼容的数组
如果我们尝试在 NumPy 中减去不兼容的数组,操作将失败并引发 ValueError。 NumPy 使用广播来处理不同形状数组之间的运算,但这只有在形状根据特定规则兼容的情况下才可行。
示例
在本例中,数组"a"和"b"的形状不兼容广播,导致错误 -
import numpy as np # 创建形状不兼容的数组 a = np.array([10, 20, 30]) b = np.array([[1, 2], [3, 4]]) # 对不兼容的数组进行减法运算 result = a - b print(result)
生成的结果如下 -
Traceback (most recent call last):File "/home/cg/root/66a1de2fae52f/main.py", line 8, in <module>result = a - bValueError: operands could not be broadcast together with shapes (3,) (2,2)