你如何看待一个numpy广播对象?

时间:2014-03-08 19:56:37

标签: python numpy

根据the documentation

>>> a = np.array([1.0, 2.0, 3.0])
>>> b = np.array([2.0, 2.0, 2.0])
>>> a * b
array([ 2.,  4.,  6.])

酷,有道理。数组中对齐的元素相乘。

然后我注意到there is another way to使用广播;使用关键字np.broadcast(a,b)
文档说明您通过输入np.broadcast(a,b)来创建广播图像。但是,它没有明确说明如何在创建此对象后查看

它提供了一个如何操作的示例,但没有准确解释示例中发生的事情:

>>> out = np.empty(b.shape)
>>> out.flat = [u+v for (u,v) in b]
>>> out
array([[ 5.,  6.,  7.],
       [ 6.,  7.,  8.],
       [ 7.,  8.,  9.]])

3 个答案:

答案 0 :(得分:5)

另一种选择是使用np.broadcast_arrays查看广播到相同形状后xy的样子:

In [32]: x = np.array([[1], [2], [3]])    
In [33]: y = np.array([4, 5, 6])

In [37]: x, y = np.broadcast_arrays(x, y)

In [38]: x
Out[38]: 
array([[1, 1, 1],
       [2, 2, 2],
       [3, 3, 3]])

In [39]: y
Out[39]: 
array([[4, 5, 6],
       [4, 5, 6],
       [4, 5, 6]])

In [40]: x+y
Out[40]: 
array([[5, 6, 7],
       [6, 7, 8],
       [7, 8, 9]])

答案 1 :(得分:4)

您可以通过将numpy.broadcast对象转换为列表来查看其内容。

>>> import numpy as np
>>> x = np.array([[1], [2], [3]])
>>> y = np.array([4, 5, 6])
>>> b = np.broadcast(x, y)
>>> b
<numpy.broadcast object at 0xad0310>
>>> list(b)
[(1, 4), (1, 5), (1, 6), (2, 4), (2, 5), (2, 6), (3, 4), (3, 5), (3, 6)]

答案 2 :(得分:1)

使用第一个数组的broadcast是:

In [350]: a = np.array([1,2,3]); b=np.array([2,2,2])
In [351]: ab=list(np.broadcast(a,b))
# [(1, 2), (2, 2), (3, 2)]
In [353]: list([i*j for i,j in ab])
Out[353]: [2, 4, 6]
当数组具有不同的维度时,

'broadcast'变得更有趣,如第二个例子(列向量和行向量)所示。

broadcast示例并不适用于生产。它说明了当您执行a*b等操作时发生的事情。