在一个庞大的代码库中,我正在使用
在代码的其他地方,我使用可以在Numpy数组上向量化操作但不是ufunc的第三方函数。这些函数不理解广播,这意味着对于像
理想情况下,我希望能够有一个函数,我们可以称之为
我可以在
np.broadcast_to
来广播数组(这里只是使用简单的例子):In [1]: x = np.array([1,2,3])
In [2]: y = np.broadcast_to(x, (2,1,3))
In [3]: y.shape
Out[3]: (2, 1, 3)
在代码的其他地方,我使用可以在Numpy数组上向量化操作但不是ufunc的第三方函数。这些函数不理解广播,这意味着对于像
y
这样的数组调用这样的函数是低效的。 Numpy的vectorize
等解决方案也不好,因为虽然它们理解广播,但会引入一个for
循环遍历数组元素,这是非常低效的。理想情况下,我希望能够有一个函数,我们可以称之为
unbroadcast
,它返回一个具有最小形状的数组,如果需要,可以将其广播回完整大小。例如:In [4]: z = unbroadcast(y)
In [5]: z.shape
Out[5]: (1, 1, 3)
我可以在
z
上运行第三方函数,然后将结果广播回y.shape
。是否有一种依赖于Numpy公共API实现的unbroadcast
方法?如果没有,是否有任何技巧可以产生所需的结果?
y[None,0]
这样的东西? - Divakarunbroadcast
返回的N维度中的最小形状不总是(1, 1, ..., 1)
(甚至可能是(1,)
)吗? - Alex Riley