所以我有两个 ndarrays:一个形状为 (N,a,a) 的数组,基本上是一堆形状为 (a,a) 的数组B 具有形状 (8,M,a,a),一个由 8 x M 个形状 (a,a) 阵列组成的矩阵我需要从 A (AB) 中减去 B,使得结果数组的形状为 (8,M*N,a,a)。更详细地说,需要从 A 中的每个数组中减去 B 的 8 个数组中的每个(总共 M 个),从而在 (a,a) 形状数组之间进行 8*M*N 次减法。如何在没有循环的情况下以矢量化方式执行此操作?这个线程做了一些类似的事情,但在较低的维度上,我不知道如何扩展它。
1 回答
哆啦的时光机
TA贡献1779条经验 获得超6个赞
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)
新轴的顺序决定了重塑,所以要小心。
添加回答
举报
0/150
提交
取消