这感觉就像应该已经存在一个问题的东西,但我找不到一个。
在numpy中,假设我有两个数组A
和B
,我怎样才能确保它们将“正交”地相互广播,而不管这两个数组的维数是什么?例如,我可以这样做:
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)
作为输出。但为了做到这一点,我必须知道至少一个阵列中的维数。有没有办法在不知道其中任何一个的情况下做到这一点?希望这是有道理的。
答案 0 :(得分:1)
重塑B
以包含与A
中的dims一样多的尾随单例维度 -
A + B.reshape(B.shape + tuple([1]*A.ndim)) # where A is generic ndarray
部分NumPy ufuncs
有outer
方法负责所有工作。因此,对于添加内容,我们可以简单地使用 -
np.add.outer(B,A)