NumPy 数组怎么相加?

文章导读
Previous Quiz Next NumPy 数组加法 NumPy 数组加法允许您在数组之间执行逐元素加法。此操作将两个相同形状的数组中对应元素相加,生成一个相同形状的新数组,其中包含相加后的值。
📋 目录
  1. NumPy 数组加法
  2. NumPy 中的逐元素加法
  3. 向 NumPy 数组添加标量
  4. 添加不同形状的 NumPy 数组
  5. 使用 Broadcasting 添加多维数组
  6. 通过广播应用函数进行相加
  7. 相加不兼容的数组
A A

NumPy - 数组加法



Previous
Quiz
Next

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)