如何在一维数组和n维数组之间进行广播以获得一个(1+n)维数组输出?

3
我有一个n维的ndarray z0 和一个一维的ndarray za,它们的大小没有任何对应关系。我想创建一个新的n+1维数组 z,其中 z[i]=z0+za[i]。是否有一些简单的方法来通过广播实现这一点?
这与这个问题不相等。如果z0是二维的,可以轻松地按照以下方式实现:
z0[np.newaxis]+norm.ppf(alphas)[:,None]

然而,我需要能够不考虑z0的维度来执行此操作,因此仅添加正确数量的Nonenp.newaxis术语是行不通的。

2个回答

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)

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解决问题。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接