Numpy减去两个相同但形状不同的数组

所以我有两个 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 次减法。

如何在没有循环的情况下以矢量化方式执行此操作?这个线程做了一些类似的事情,但在较低的维度上,我不知道如何扩展它。


30秒到达战场
浏览 226回答 1
1回答

哆啦的时光机

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&nbsp; # <- (1,2,1,2,2)b.shape&nbsp; # <- (8,1,4,2,2)现在什么时候可以进行广播c = a - bc.shape&nbsp; # <- (8,2,4,2,2)当您重塑 (2x4=8) 组件时,它们会对齐。c.reshape(8,-1,2,2)&nbsp;新轴的顺序决定了重塑,所以要小心。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python