Numpy“正交”广播

时间:2018-03-21 11:20:09

标签: python numpy numpy-broadcasting

这感觉就像应该已经存在一个问题的东西,但我找不到一个。

在numpy中,假设我有两个数组AB,我怎样才能确保它们将“正交”地相互广播,而不管这两个数组的维数是什么?例如,我可以这样做:

import numpy as np

A1 = np.zeros((2,2))
A2 = np.zeros((2,2,2))
B = np.ones((2,2))

C1 = A1 + B[...,np.newaxis,np.newaxis]
C2 = A2 + B[...,np.newaxis,np.newaxis,np.newaxis]

print(C1.shape)
print(C2.shape)

给出了

(2, 2, 2, 2)
(2, 2, 2, 2, 2)

作为输出。但为了做到这一点,我必须知道至少一个阵列中的维数。有没有办法在不知道其中任何一个的情况下做到这一点?希望这是有道理的。

1 个答案:

答案 0 :(得分:1)

重塑B以包含与A中的dims一样多的尾随单例维度 -

A + B.reshape(B.shape + tuple([1]*A.ndim)) # where A is generic ndarray

部分NumPy ufuncsouter方法负责所有工作。因此,对于添加内容,我们可以简单地使用 -

np.add.outer(B,A)