目录

NumPy - 广播( Broadcasting)

术语broadcasting是指NumPy在算术运算期间处理不同形状的阵列的能力。 对数组的算术运算通常在相应的元素上完成。 如果两个阵列具有完全相同的形状,则可以平滑地执行这些操作。

例子1 (Example 1)

import numpy as np 
a = np.array([1,2,3,4]) 
b = np.array([10,20,30,40]) 
c = a * b 
print c

其输出如下 -

[10   40   90   160]

如果两个数组的维度不同,则无法进行元素到元素的操作。 但是,由于广播能力,在NumPy中仍然可以对非相似形状的阵列进行操作。 较小的阵列被broadcast到较大阵列的大小,以便它们具有兼容的形状。

如果满足以下规则,则可以进行广播 -

  • ndim小于另一个的数组在其形状前面加上'1'。

  • 输出形状的每个维度的大小是该维度中输入大小的最大值。

  • 如果输入在特定维度中的大小与输出大小匹配或者其值恰好为1,则可以在计算中使用该输入。

  • 如果输入的维度大小为1,则该维度中的第一个数据条目将用于该维度上的所有计算。

如果上述规则产生有效结果且下列之一为真,则称一组数组是可broadcastable的 -

  • 阵列具有完全相同的形状。

  • 数组具有相同数量的维度,每个维度的长度可以是常用长度或1。

  • 具有太小尺寸的阵列可以使其形状预先具有长度为1的尺寸,使得上述特性成立。

以下程序显示了广播的示例。

例子2 (Example 2)

import numpy as np 
a = np.array([[0.0,0.0,0.0],[10.0,10.0,10.0],[20.0,20.0,20.0],[30.0,30.0,30.0]]) 
b = np.array([1.0,2.0,3.0])  
print 'First array:' 
print a 
print '\n'  
print 'Second array:' 
print b 
print '\n'  
print 'First Array + Second Array' 
print a + b

该计划的产出如下 -

First array:
[[ 0. 0. 0.]
 [ 10. 10. 10.]
 [ 20. 20. 20.]
 [ 30. 30. 30.]]
Second array:
[ 1. 2. 3.]
First Array + Second Array
[[ 1. 2. 3.]
 [ 11. 12. 13.]
 [ 21. 22. 23.]
 [ 31. 32. 33.]]

下图演示了如何广播数组b以与a兼容。

排列
↑回到顶部↑
WIKI教程 @2018