【问题标题】:Concatinate and reshape 2 numpy array with different with dimensions on high dimensions连接和重塑具有不同高维维度的二维 numpy 数组
【发布时间】:2022-01-25 12:49:33
【问题描述】:

我有 2 个 numpy 数组,如下所示

a = np.random.rand(30,6,5,4)
b = np.random.rand(6,5,4,3)

我想以具有(33, 6, 5, 4) 形状的方式合并这些数组。我可以通过遍历 b 数组的第 4 维并一一连接来做到这一点,但这似乎不是很有效。是否有可能以更“Python”的方式做到这一点?

【问题讨论】:

  • 转置b3 维度放在首位

标签: python numpy matrix


【解决方案1】:

您始终可以将任意两个数组展平、连接,然后重新整形为您想要的尺寸。通常,数组的形状对用于保存数组的内存没有任何影响。形状只是指定 python 如何访问这些值。

因此.flatten() 是一个零成本函数,不会移动任何内存值。相当于只设置shape值:

A = np.array([[1,2],[3,4]])
A.shape = (4,)

如果扁平化数组中的值不是您想要的顺序,您可能需要运行转置以将值移动到您想要的顺序。

【讨论】:

    【解决方案2】:
    In [390]: a = np.random.rand(30,6,5,4)
         ...: b = np.random.rand(6,5,4,3)
    

    使用转置将b 转换为兼容的形状:

    In [392]: b1=np.transpose(b,(3,0,1,2))
    In [393]: b1.shape
    Out[393]: (3, 6, 5, 4)
    In [394]: c = np.concatenate((a,b1),axis=0)
    In [395]: c.shape
    Out[395]: (33, 6, 5, 4)
    

    您没有提供有关迭代方法的详细信息,但这只是对我有意义的一种:

    In [398]: alist = [a]
         ...: for i in range(3):
         ...:     alist.append(b[None,...,i])
         ...: 
    In [399]: np.concatenate(alist, 0).shape
    Out[399]: (33, 6, 5, 4)
    

    【讨论】:

      猜你喜欢
      • 2021-03-15
      • 1970-01-01
      • 2020-03-18
      • 2021-12-05
      • 2017-06-10
      • 1970-01-01
      • 2011-05-08
      • 2020-08-24
      • 2021-05-02
      相关资源
      最近更新 更多