📜  NumPy-广播(1)

📅  最后修改于: 2023-12-03 15:18:03.511000             🧑  作者: Mango

NumPy-广播

NumPy是Python中最受欢迎的科学计算库之一,它提供了大量的高效矩阵计算操作方法,其中最重要的概念之一就是广播。

什么是NumPy-广播?

广播是一种强有力的NumPy机制,它可以通过适当地扩展数组使它们具有相同的形状,从而进行操作。它是一种在不创建显式副本的情况下,对不同形状的数组进行算术运算的方式。使用广播功能时,NumPy会自动将不同形状的数组转换为共同形状的数组。

广播规则

要进行广播,NumPy遵循一组严格的规则:

  1. 如果两个数组的形状不同,则在较小的数组的前面添加一些“1”。
  2. 如果两个数组在任何维度上都不匹配,则相应的维度为1。
  3. 如果两个数组在任何维度上都不匹配,并且没有任何一个维度是1,则抛出ValueError异常。
NumPy-广播例子

假设我们有两个数组a和b,并想要对它们进行相加。我们可以直接使用“+”操作符并得到结果。这两个数组的形状需要相同,否则就需要使用广播规则来进行匹配。

import numpy as np 

# We will try to add two arrays A and B, using "+" operator. 
A = np.array([  [1, 2, 3], 
                [4, 5, 6], 
                [7, 8, 9]]) 

B = np.array([  [8, 7, 6], 
                [5, 4, 3], 
                [2, 1, 0]]) 


# 直接相加,因为A和B形状相等(3,3)
print("Adding two arrays: ")
print(A + B) 

# 改变B的形状,因为B的行数和A一样,转换成(3,1)
B = np.array([8, 7, 6])  

print("\nArray B:")
print(B)

# 通过广播功能,添加两个数组A和B。 
print("\nAdding two arrays after broadcasting: ")
print(A + B)  

结果:

Adding two arrays: 
[[ 9  9  9]
 [ 9  9  9]
 [ 9  9  9]]

Array B:
[8 7 6]

Adding two arrays after broadcasting: 
[[ 9  9  9]
 [12 12 12]
 [15 15 15]]

注释:

  1. 我们使用“+”操作符对两个数组进行了相加操作。
  2. 由于A和B的形状相同,因此Addition操作成功进行。
  3. 然后我们试图使用已更改形状的B来对A进行加法操作。 由于B的形状与A不同,因此我们需要使用广播规则来匹配它们。
  4. 我们将B的形状更改为(3,1),因此它将匹配A和进行加法操作。
  5. 在最后的输出中,您可以看到广播规则是如何适用于计算的。