#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.]])