我有一个n维的ndarray z0
和一个n维的ndarray za
。尺寸不以任何方式彼此对应。我希望能够创建一个新的n + 1维数组z
,其中z[i]=z0+za[i]
。是否有一些简单的方法来做广播?
这不等同于this question。如果z0
是2D,则可以通过以下方式轻松实现:
z0[np.newaxis]+norm.ppf(alphas)[:,None]
但是,无论z0的维度如何,我都需要能够执行此操作,因此只需添加正确数量的None
或np.newaxis
条款就无法使用。
答案 0 :(得分:3)
怎么样:
z = za.reshape(za.shape + (1,)*z0.ndim) + z0
例如:
import numpy as np
z0 = np.ones((2, 3, 4, 5))
za = np.ones(6)
z = za.reshape(za.shape + (1,)*z0.ndim) + z0
print z.shape
# (6, 2, 3, 4, 5)
答案 1 :(得分:2)
也许像
>>> z0 = np.random.random((2,3,4))
>>> za = np.random.random(5)
>>> z = np.rollaxis((z0[...,None] + za), -1)
>>> z.shape
(5, 2, 3, 4)
>>> [np.allclose(z[i], z0 + za[i]) for i in range(len(za))]
[True, True, True, True, True]
我使用...
表示任意数量的维度,rollaxis
将其置于我认为您想要的形状中。如果你不介意新轴在最后,我认为你可以放弃z0[..., None] + za
。