Numpy减去两个相等ndim但形状不同的阵列



所以我有两个ndarrays:

a具有形状(n,a,a),n个形状库(a,a)基本上

b具有形状(8,m,a,a),一个8 x m形状阵列的矩阵(a,a)

我需要从A(A-B)中减去B,以使所得数组的形状为形状(8,m*n,a,a)。需要从A中的每个数组中减去B的8个阵列中的每个词语(M总数),从而导致(a,a)形状阵列之间的8*m*n减去。

我该如何在没有循环的情况下以矢量化的方式进行操作?该线程执行类似的操作,但在较低的维度中,我不知道如何扩展它。

A = np.arange(8).reshape(2,2,2)
B = np.ones(shape=(8,4,2,2))

如果维度相同或一个维度为1,则一般广播有效,所以我们这样做;

a = A[np.newaxis, :, np.newaxis, :, :]
b = B[:, np.newaxis, :, :, :]
a.shape  # <- (1,2,1,2,2)
b.shape  # <- (8,1,4,2,2)

现在您可以进行广播

c = a - b
c.shape  # <- (8,2,4,2,2)

,当您重塑(2x4 = 8)组件时。

c.reshape(8,-1,2,2) 

新轴的排序决定了重塑,因此请小心。

最新更新