将三维 ndarray 重塑为二维
Reshaping a three-dimensional ndarray into two dimensions
我有一个三维数组(形状是2,2,3),可以认为是两个二维数组的组合。我想得到这两个数组并将它们并排放置。这是我的起点:
test1 = np.ndarray((2,2,3))
test1[0] = np.array([[1,2,3],
[4,5,6]])
test1[1] = np.array([[7,8,9],
[10,11,12]])
我可以通过遍历第一个维度得到想要的结果,像这样:
output = np.ndarray((2,6))
for n_port, port in enumerate(test1):
output[:,n_port*3:(n_port+1)*3] = port
给出:
array([[ 1., 2., 3., 7., 8., 9.],
[ 4., 5., 6., 10., 11., 12.]])
但我想知道是否有更巧妙的方法来做到这一点。重塑函数是显而易见的方法,但它将它们展平,而不是并排堆叠:
test1.reshape((2,6))
array([[ 1., 2., 3., 4., 5., 6.],
[ 7., 8., 9., 10., 11., 12.]])
感谢收到任何帮助!
你可以先做一个swapaxes()
,然后reshape()
:
test1.swapaxes(0,1).reshape(2,6)
基于线程中描述的回溯思想:,您可以使用 arr.transpose
和 arr.reshape
的组合,如:
In [162]: dd = np.arange(1, 13).reshape(2, 2, 3)
In [163]: dd
Out[163]:
array([[[ 1, 2, 3],
[ 4, 5, 6]],
[[ 7, 8, 9],
[10, 11, 12]]])
In [164]: dd.transpose((1, 0, 2))
Out[164]:
array([[[ 1, 2, 3],
[ 7, 8, 9]],
[[ 4, 5, 6],
[10, 11, 12]]])
In [165]: dd.transpose((1, 0, 2)).reshape(2, -1)
Out[165]:
array([[ 1, 2, 3, 7, 8, 9],
[ 4, 5, 6, 10, 11, 12]])
我有一个三维数组(形状是2,2,3),可以认为是两个二维数组的组合。我想得到这两个数组并将它们并排放置。这是我的起点:
test1 = np.ndarray((2,2,3))
test1[0] = np.array([[1,2,3],
[4,5,6]])
test1[1] = np.array([[7,8,9],
[10,11,12]])
我可以通过遍历第一个维度得到想要的结果,像这样:
output = np.ndarray((2,6))
for n_port, port in enumerate(test1):
output[:,n_port*3:(n_port+1)*3] = port
给出:
array([[ 1., 2., 3., 7., 8., 9.],
[ 4., 5., 6., 10., 11., 12.]])
但我想知道是否有更巧妙的方法来做到这一点。重塑函数是显而易见的方法,但它将它们展平,而不是并排堆叠:
test1.reshape((2,6))
array([[ 1., 2., 3., 4., 5., 6.],
[ 7., 8., 9., 10., 11., 12.]])
感谢收到任何帮助!
你可以先做一个swapaxes()
,然后reshape()
:
test1.swapaxes(0,1).reshape(2,6)
基于线程中描述的回溯思想:arr.transpose
和 arr.reshape
的组合,如:
In [162]: dd = np.arange(1, 13).reshape(2, 2, 3)
In [163]: dd
Out[163]:
array([[[ 1, 2, 3],
[ 4, 5, 6]],
[[ 7, 8, 9],
[10, 11, 12]]])
In [164]: dd.transpose((1, 0, 2))
Out[164]:
array([[[ 1, 2, 3],
[ 7, 8, 9]],
[[ 4, 5, 6],
[10, 11, 12]]])
In [165]: dd.transpose((1, 0, 2)).reshape(2, -1)
Out[165]:
array([[ 1, 2, 3, 7, 8, 9],
[ 4, 5, 6, 10, 11, 12]])