【问题标题】:Numpy Subtract two arrays of equal ndim but different shapeNumpy减去两个ndim相等但形状不同的数组
【发布时间】:2019-07-30 22:33:03
【问题描述】:

所以我有两个 ndarray:

形状为(N,a,a)的A,基本上是N个形状为(a,a)的数组

形状为 (8,M,a,a) 的 B,一个由 8 x M 形状为 (a,a) 的数组组成的矩阵

我需要从 A (A-B) 中减去 B,使得结果数组的形状为 (8,M*N,a,a)。 更详细地说,需要从 A 中的每个数组中减去 B 的 8 个数组中的每个(共 M 个),从而在 (a,a) 形状数组之间进行 8*M*N 次减法。

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

【问题讨论】:

    标签: python arrays numpy


    【解决方案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  # <- (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) 
    

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

    【讨论】:

      猜你喜欢
      • 2016-02-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-04-04
      • 1970-01-01
      • 1970-01-01
      • 2015-12-28
      相关资源
      最近更新 更多