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 数组添加标量
当向数组添加一个标量(单个值)时,该标量会被广播以匹配数组的形状。这意味着标量被有效地视为与原始数组相同形状的数组,其中所有元素等于标量值。
Broadcasting 描述了 NumPy 在算术操作期间如何处理不同形状的数组。当涉及不同形状的数组进行操作时,NumPy 会根据特定的 broadcasting 规则自动调整它们的形状以相互匹配。
示例
在本示例中,我们将标量 "10" 添加到数组 "a" 的每个元素上 −
import numpy as np # 创建一个数组 a = np.array([1, 2, 3]) # 添加标量 result = a + 10 print(result)
这将产生以下结果 −
[11 12 13]
添加不同形状的 NumPy 数组
NumPy 中的 broadcasting 允许通过调整维度以相互匹配来添加不同形状的数组。
NumPy 通过从最右边开始比较维度并向后工作来对齐数组的维度进行 broadcasting。两个维度被认为是兼容的,如果它们相等,或者其中一个为 1,在这种情况下它会被广播以匹配另一个维度。
当维度不直接匹配时,NumPy 会根据需要沿不匹配的维度拉伸较小的数组以匹配较大数组的形状。
示例
在下面的示例中,数组 "b" 被广播以匹配数组 "a" 的形状,然后执行逐元素加法 −
import numpy as np # 创建不同形状的数组 a = np.array([[1, 2, 3], [4, 5, 6]]) b = np.array([10, 20, 30]) # 使用 broadcasting 添加数组 result = a + b print(result)
以上代码的输出如下 −
[[11 22 33] [14 25 36]]
使用 Broadcasting 添加多维数组
在 NumPy 中,broadcasting 允许在不同形状的多维数组之间执行算术操作,例如加法,通过自动扩展较小数组的维度以匹配较大数组的形状。
此过程涉及从最右边对齐维度,并根据需要拉伸较小数组的维度。
示例
在下面的示例中,我们将一维数组 "a" 广播以匹配二维数组 "b" 的维度 −
import numpy as np # 创建多维数组 a = np.array([1, 2, 3]) b = np.array([[10], [20], [30]]) # 使用 broadcasting 添加多维数组 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)