NumPy - 数组加法
NumPy 数组加法
NumPy 数组加法允许你在数组之间执行逐元素加法。此运算将两个相同形状的数组中的相应元素相加,生成一个形状相同的新数组,其值相加。
如果两个数组的形状不同,NumPy 会在特定条件下广播较小的数组以匹配较大数组的形状。
NumPy 中的逐元素加法
逐元素加法是 NumPy 中最基本的数组加法形式,即将两个数组的相应元素相加,生成一个新数组。
这种加法运算对形状相同的数组进行操作,对两个数组中的每对元素分别执行加法运算。
示例
在下面的示例中,我们将数组 a 中的每个元素与数组 b 中的相应元素相加 -
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 在算术运算过程中如何处理不同形状的数组。当操作涉及不同形状的数组时,NumPy 会遵循特定的广播规则自动调整它们的形状以使其彼此匹配。
示例
在此示例中,我们将标量"10"添加到数组"a"的每个元素 -
import numpy as np # 创建数组 a = np.array([1, 2, 3]) # 添加标量 result = a + 10 print(result)
这将产生以下结果 -
[11 12 13]
添加不同形状的 NumPy 数组
NumPy 中的广播功能允许通过调整维度以相互匹配来添加不同形状的数组。
NumPy 通过从最右侧比较维度并向后工作来对齐数组的维度以进行广播。如果两个维度相等,或者其中一个维度为 1,则认为它们是兼容的。在这种情况下,它会被广播以匹配另一个维度。
当维度不直接匹配时,NumPy 会根据需要沿着不匹配的维度拉伸较小的数组,以匹配较大数组的形状。
示例
在下面的示例中,数组"b"被广播以匹配数组"a"的形状,然后执行逐元素加法 -
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 中,广播允许在不同形状的多维数组之间进行算术运算(例如加法),方法是自动扩展较小数组的维度以匹配较大数组的形状。
此过程包括从最右侧对齐维度,并根据需要拉伸较小数组的维度。
示例
在下面的示例中,我们广播一维数组"a"以匹配二维数组"b"的维度 -
import numpy as np # 创建多维数组 a = np.array([1, 2, 3]) b = np.array([[10], [20], [30]]) # 使用广播功能对多维数组进行加法运算 result = a + b print(result)
输出结果如下 -
[[11 12 13] [21 22 23] [31 32 33]]
使用广播功能通过函数进行加法运算
NumPy 中的广播功能不仅简化了直接的元素级算术运算,还允许将函数应用于不同形状的数组。使用广播,您可以对不同形状的数组应用各种数学函数。
示例
在此示例中,我们将标量"10"添加到数组"a"的每个元素,然后逐个元素应用"sine"函数 -
import numpy as np # 创建数组 a = np.array([1, 2, 3]) # 使用广播应用函数 result = np.sin(a + 10) print(result)
执行上述代码后,我们得到以下输出 -
[-0.99999021 -0.53657292 0.42016704]
添加不兼容的数组
如果我们尝试在 NumPy 中添加不兼容的数组,操作将失败并引发 ValueError。NumPy 使用广播来处理不同形状数组之间的操作,但这只有在形状根据特定规则兼容时才可行。
广播的工作原理是从最右边的维度开始向后对齐数组的维度。要使两个维度兼容,它们必须相等,或者其中一个必须为 1(在这种情况下,它会被广播以匹配另一个维度)。
如果数组的形状不符合这些条件,则无法进行广播,并且操作会导致错误。
示例
在本例中,数组"a"和"b"的形状不兼容,无法进行广播,从而导致错误 -
import numpy as np # 创建形状不兼容的数组 a = np.array([1, 2, 3]) b = np.array([[10, 20], [30, 40]]) # 尝试添加不兼容的数组 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)