广播机制

NumPy 入门

Izzy Weber

Core Curriculum Manager, DataCamp

广播机制简介

 

显示两个不同形状数组相加的图示

NumPy 入门

标量广播

展示二维数组与标量 2 相加的图示  

展示二维数组与任意同形状、元素全为 2 的数组相加的图示

NumPy 入门

兼容性规则

  • NumPy 从右到左比较数组维度  

 

 

 

 

将兼容性规则应用于形状 (10, 5) 与 (10, 1) 的图示

NumPy 入门

兼容性规则

  • NumPy 从右到左比较数组维度
  • 两个维度兼容当…
    • 其中一个长度为 1,或
    • 二者长度相等
  • 所有维度组都需兼容

 

将兼容性规则应用于形状 (10, 5) 与 (10, 1) 的图示

NumPy 入门

能否广播?

 

可广播的形状:

  • (10, 5)(10, 1)
  • (10, 5)(5, )

 

不可广播的形状:

  • (10, 5)(5, 10)
  • (10, 5)(10, )
NumPy 入门

按行广播

形状为 (2, 5) 的数组与形状为 (1, 5) 的数组相加

 

array = np.arange(10).reshape((2, 5))
array + np.array([0, 1, 2, 3, 4])
array([[ 0,  2,  4,  6,  8],
       [ 5,  7,  9, 11, 13]])
NumPy 入门

按行广播

 

 

形状为 (2, 5) 的数组与形状为 (2, 5) 的数组相加

NumPy 入门

不兼容的广播

 

展示将形状为 (2, 5) 的数组与形状为 (2,) 的数组相加会产生 ValueError 的图示

 

array = np.arange(10).reshape((2, 5))
array + np.array([0, 1])
ValueError: operands could not be broadcast together with shapes (2,5) (2,) 
NumPy 入门

按列广播

将形状为 (2, 5) 的数组与形状为 (2, 1) 的数组相加的图示

array = np.arange(10).reshape((2, 5))
array + np.array([0, 1]).reshape((2, 1))
array([[ 0,  1,  2,  3,  4],
       [ 6,  7,  8,  9, 10]])
NumPy 入门

按列广播

 

 

将单列数组按列扩展到与更大数组同形状的图示

NumPy 入门

其他运算符

形状为 (2, 2) 的数组与形状为 (2, 1) 的数组相乘

从形状为 (2, 2) 的数组中减去形状为 (2,) 的数组

NumPy 入门

让我们练习吧!

NumPy 入门

Preparing Video For Download...