【问题标题】:Trouble with dimensional order when cloning a 1-dimensional numpy array to 3 dimensions将 1 维 numpy 数组克隆为 3 维时出现维度顺序问题
【发布时间】:2018-12-04 07:39:29
【问题描述】:

我无法找到克隆一维 numpy 数组以创建 3-D 数组的方法。比如说我有

z = np.array([0, 2, 3, 5, 7, 9, 10])

这表示 3-D 空间中的垂直列(例如,假设它以米为单位)。我想创建一个水平维度 (x, y),以便最终数组具有维度 (len(z), len(x), len(y)) ,其中每个 x,y 点的每一列都是相同的。我这样做是为了将空间维度与我拥有的其他 3-D 数据进行匹配。

因此,以数组 z 作为输入,并给定水平维度,例如 ndimx=3,ndimy=2,我想找到一个输出数组的函数

np.array([ [[0, 0], [0, 0], [0, 0]],  
           [[2, 2], [2, 2], [2, 2]],       
           [[3, 3], [3, 3], [3, 3]],       
           [[5, 5], [5, 5], [5, 5]],       
           [[7, 7], [7, 7], [7, 7]],       
           [[9, 9], [9, 9], [9, 9]],       
           [[10, 10], [10, 10], [10, 10]] ])

具有 (7, 3, 2) 的形状。起初这对我来说似乎微不足道,但在尝试了多年的 np.dstack()、np.astype()、np.repeat() 和 ().T 转置之后,我无法获得正确的维度顺序。

这里很关键,垂直列是第一个维度。我敢打赌答案确实是微不足道的,我只是找不到能做到这一点的神奇 numpy 函数。

有什么建议吗?

【问题讨论】:

    标签: python arrays numpy


    【解决方案1】:

    我们可以简单地查看输入 znp.broadcast_to,而无需额外的内存开销,因此几乎没有性能 -

    np.broadcast_to(z[:,None,None],(len(z),ndimx,ndimy))
    

    示例运行 -

    In [23]: z
    Out[23]: array([ 0,  2,  3,  5,  7,  9, 10])
    
    In [24]: ndimx=3; ndimy=2
    
    In [25]: np.broadcast_to(z[:,None,None],(len(z),ndimx,ndimy))
    Out[25]: 
    array([[[ 0,  0],
            [ 0,  0],
            [ 0,  0]],
    
           [[ 2,  2],
            [ 2,  2],
            [ 2,  2]],
    
           [[ 3,  3],
            [ 3,  3],
            [ 3,  3]],
    
           [[ 5,  5],
            [ 5,  5],
            [ 5,  5]],
    
           [[ 7,  7],
            [ 7,  7],
            [ 7,  7]],
    
           [[ 9,  9],
            [ 9,  9],
            [ 9,  9]],
    
           [[10, 10],
            [10, 10],
            [10, 10]]])
    

    【讨论】:

      【解决方案2】:
      In [360]: z = np.array([0, 2, 3, 5, 7, 9, 10])
      In [361]: z1 = np.stack([z,z], axis=1)
      In [362]: z2 = np.stack([z1,z1,z1],axis=1)
      In [363]: z2
      Out[363]: 
      array([[[ 0,  0],
              [ 0,  0],
              [ 0,  0]],
      
             [[ 2,  2],
              [ 2,  2],
              [ 2,  2]],
      
             [[ 3,  3],
              [ 3,  3],
              [ 3,  3]],
      
            ... 
             [[10, 10],
              [10, 10],
              [10, 10]]])
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2013-04-17
        • 2016-12-30
        • 2012-08-13
        • 2014-06-20
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多