我想将一个数组广播b
到它与另一个数组进行算术运算时所采用的形状a
。
例如,如果a.shape = (3,3)
andb
是一个标量,我想得到一个数组,其形状是(3,3)
并且用标量填充。
一种方法是这样的:
>>> import numpy as np
>>> a = np.arange(9).reshape((3,3))
>>> b = 1 + a*0
>>> b
array([[1, 1, 1],
[1, 1, 1],
[1, 1, 1]])
虽然这实际上可行,但我不禁觉得它看起来有点奇怪,并且对于其他查看我正在尝试做的代码的人来说并不明显。
有没有更优雅的方法来做到这一点?我查看了 的文档np.broadcast
,但速度要慢几个数量级。
In [1]: a = np.arange(10000).reshape((100,100))
In [2]: %timeit 1 + a*0
10000 loops, best of 3: 31.9 us per loop
In [3]: %timeit bc = np.broadcast(a,1);np.fromiter((v for u, v in bc),float).reshape(bc.shape)
100 loops, best of 3: 5.2 ms per loop
In [4]: 5.2e-3/32e-6
Out[4]: 162.5