NumPy 广播

NumPy 广播

术语 broadcasting 指的是NumPy在算术运算过程中能够处理不同形状的数组的能力。数组的算术运算通常是对应元素进行操作。如果两个数组正好具有相同的形状,则这些运算能够顺利进行。

示例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中,可以对非相似形状的数组进行操作,这是因为它具备了广播功能。较小的数组将被 广播 到较大数组的大小,以使它们具有兼容的形状。

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

  • 具有较小 ndim 的数组,在其形状中以’1’作为前缀。

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

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

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

如果满足上述规则并且以下条件之一成立,则一组数组被称为 可广播的

  • 数组具有完全相同的形状。

  • 数组具有相同数量的维度,并且每个维度的长度是一个共同的长度或1。

  • 维度较少的数组可以在其形状上增加一个长度为1的维度,以使上述属性成立。

下面的程序显示了广播的一个例子。

示例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 兼容。

NumPy 广播

Python教程

Java教程

Web教程

数据库教程

图形图像教程

大数据教程

开发工具教程

计算机教程