将 3D numpy 矩阵重塑为 2D numpy 矩阵,保持行位置
Reshape 3D numpy matrix to 2D numpy matrix, maintaining row position
作为一个简化示例,我有一个 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 矩阵 (a) 重塑为 2D 矩阵 (b),同时保持行位置。这是目标:
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()
的某种组合来实现这个目标?但是我对这种矩阵操作的东西还很陌生,这有点令人难以置信。到目前为止,我所做的一切都无法让我到达那里......
您可以先将前 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.]])
作为一个简化示例,我有一个 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 矩阵 (a) 重塑为 2D 矩阵 (b),同时保持行位置。这是目标:
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()
的某种组合来实现这个目标?但是我对这种矩阵操作的东西还很陌生,这有点令人难以置信。到目前为止,我所做的一切都无法让我到达那里......
您可以先将前 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.]])