为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

30秒到达战场 2021-11-30 18:36:24
所以我有两个 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) 

新轴的顺序决定了重塑,所以要小心。


查看完整回答
反对 回复 2021-11-30
  • 1 回答
  • 0 关注
  • 223 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信