Преобразуйте 3D-матрицу numpy в 2D-матрицу numpy, сохраняя положение строки

#python #arrays #numpy #matrix #reshape

Вопрос:

В качестве упрощенного примера у меня есть 3D-матрица numpy, которая выглядит следующим образом:

 a = np.array([[[1,2],
               [4,np.nan],
               [7,8]],

              [[7,6],
               [4,3],
               [1,0]],

              [[0,1],
               [3,np.nan]
               [6,7]],

              [[8,7],
               [5,4],
               [2,1]]])
 
 >>> a.shape
(4,3,2)
 

Я хотел бы преобразовать эту 3D-матрицу (а) в 2D-матрицу (б), сохраняя положение строки. Это и есть наша цель:

 b = np.array([[1,2,7,6,0,1,8,7],
              [4,np.nan,4,3,3,np.nan,5,4],
              [7,8,1,0,6,7,2,1]])
 
 >>> b.shape
(3,8)
 

Я думаю, что я должен быть в состоянии достичь этого с помощью некоторой комбинации .reshape() и .transpose() ? Но я довольно новичок в этих матричных манипуляциях, и все это немного ошеломляет. Ничто из того, что я пробовал до сих пор, не привело меня туда…

Ответ №1:

Вы можете сначала поменять местами первые 2 оси transpose (так, чтобы форма была (3, 4, 2) ), а затем reshape :

 >>> a.transpose(1, 0, 2).reshape(3, 8)

array([[ 1.,  2.,  7.,  6.,  0.,  1.,  8.,  7.],
       [ 4., nan,  4.,  3.,  3., nan,  5.,  4.],
       [ 7.,  8.,  1.,  0.,  6.,  7.,  2.,  1.]])