要重塑numpy 数组,请使用reshape 方法。
基本上,它会在阵列被展平时查看阵列,并使用新的给定形状对其进行处理。然而,它确实首先迭代最后一个索引,即最内层的列表将被处理,然后是下一个,依此类推。
所以np.array([1, 2, 3, 4, 5, 6]).reshape((3, 2)) 和np.array([[1, 2, 3], [4, 5, 6]]).reshape((3, 2)) 都会给出[[1, 2], [3, 4], [5, 6]],因为这两个原始数组在展平时是相同的。
您想要一个 (12, 2) 数组,或者如果您阅读 reshape 文档,您可以传递 (-1, 2) 并且 numpy 将计算另一个维度。
因此,如果您按原样为数组指定新形状,它将开始使用第一个列表 x[0, 0] = [1, 2, 3, 4],它将变为 [[1, 2], [3, 4]],...这不是您想要的。
但请注意,如果您先转置数组,那么您将在内部列表中拥有所需的项目(快速变化的索引):
In : x.T
Out:
array([[[1., 5.],
[1., 5.],
[1., 5.]],
[[2., 6.],
[2., 6.],
[2., 6.]],
[[3., 7.],
[3., 7.],
[3., 7.]],
[[4., 8.],
[4., 8.],
[4., 8.]]])
这几乎是您想要的,除了额外的维度。所以现在你可以重塑它并按照你想要的方式获得你的 (12, 2) 数组:
In : x.T.reshape((-1, 2))
Out:
array([[1., 5.],
[1., 5.],
[1., 5.],
[2., 6.],
[2., 6.],
[2., 6.],
[3., 7.],
[3., 7.],
[3., 7.],
[4., 8.],
[4., 8.],
[4., 8.]])