所以我有两个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)
新轴的排序决定了重塑,因此请小心。