【问题标题】:Interlace Rows 2D Numpy Array交错行 2D Numpy 数组
【发布时间】:2019-10-20 09:14:54
【问题描述】:

我有一个像这样的二维 numpy 数组

array([[x1,x2,x3,x4],
       [x2,x3,x4,x5],
       [x3,x4,x5,x6],
       [y1,y2,y3,y4],
       [y2,y3,y4,y5],
       [y3,y4,y5,y6],])

我想交错行,使数组看起来像这样

array([[x1,x2,x3,x4],
       [y1,y2,y3,y4],
       [x2,x3,x4,x5],
       [y2,y3,y4,y5],
       [x3,x4,x5,x6],
       [y3,y4,y5,y6],])

【问题讨论】:

    标签: python arrays numpy


    【解决方案1】:
    x = np.random.randint(10,size = (3,5))
    
    Out[23]: 
    array([[1, 5, 8, 4, 6],
           [8, 1, 7, 0, 8],
           [4, 7, 5, 2, 9]])
    
    y = np.random.randint(10,size = (3,5))
    
    Out[24]: 
    array([[7, 4, 0, 5, 7],
           [4, 2, 8, 6, 1],
           [1, 2, 8, 6, 0]])
    
    np.hstack((x,y)).reshape(6,5)
    
    Out[25]: 
    array([[1, 5, 8, 4, 6],
           [7, 4, 0, 5, 7],
           [8, 1, 7, 0, 8],
           [4, 2, 8, 6, 1],
           [4, 7, 5, 2, 9],
           [1, 2, 8, 6, 0]])
    

    【讨论】:

      【解决方案2】:

      两个相关的方法:

      # create example array
      A = np.sum(np.ix_(np.array(list("abcxyz"),"O"),np.array(list("1234"),"O"))).astype("U2")
      A
      # array([['a1', 'a2', 'a3', 'a4'],
      #        ['b1', 'b2', 'b3', 'b4'],
      #        ['c1', 'c2', 'c3', 'c4'],
      #        ['x1', 'x2', 'x3', 'x4'],
      #        ['y1', 'y2', 'y3', 'y4'],
      #        ['z1', 'z2', 'z3', 'z4']], dtype='<U2')
      

      你可以使用reshaping和swapaxes:

      A.reshape(2,-1,A.shape[-1]).swapaxes(0,1).reshape(A.shape)
      

      或者你可以重塑两次,在一个方向上使用 FORTRAN 顺序,而不是另一个方向:

      A.reshape(-1,2,A.shape[-1],order='F').reshape(A.shape)
      

      或

      A.reshape(2,-1,A.shape[-1]).reshape(A.shape,order="F")
      

      所有情况下的结果

      # array([['a1', 'a2', 'a3', 'a4'],
      #        ['x1', 'x2', 'x3', 'x4'],
      #        ['b1', 'b2', 'b3', 'b4'],
      #        ['y1', 'y2', 'y3', 'y4'],
      #        ['c1', 'c2', 'c3', 'c4'],
      #        ['z1', 'z2', 'z3', 'z4']], dtype='<U2')
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2021-01-10
        • 2017-08-19
        • 1970-01-01
        • 2020-11-05
        • 2013-06-30
        • 2012-06-08
        相关资源
        最近更新 更多