我有一个n维的narray z0
和一个一维的narray za
。这些尺寸在任何方面都不对应。我想创建一个新的n+1维数组,z
,其中z[i]=z0+za[i]
。有什么简单的方法可以做到这一点吗?
这个不等于这个问题。如果z0
是2D的,这可以很容易地实现如下:
z0[np.newaxis]+norm.ppf(alphas)[:,None]
然而,无论z0的维度如何,我都需要能够做到这一点,因此简单地添加None
或np.newaxis
项的正确数量是行不通的。
如何:
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)
比如
>>> 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
,我想。