如何在1D和nD数组之间广播以获得(1+n)D数组输出?



我有一个n维的narray z0和一个一维的narray za。这些尺寸在任何方面都不对应。我想创建一个新的n+1维数组,z,其中z[i]=z0+za[i]。有什么简单的方法可以做到这一点吗?

这个不等于这个问题。如果z0是2D的,这可以很容易地实现如下:

z0[np.newaxis]+norm.ppf(alphas)[:,None]

然而,无论z0的维度如何,我都需要能够做到这一点,因此简单地添加Nonenp.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,我想。

最新更新