将数组重塑为方形数组Python

Chi*_*ack 6 python arrays numpy concatenation reshape

我有一系列形状的数字26*43264.我想把它改成一个形状的阵列,208*208但是大块的26*26.

[[ 0, 1, 2, 3, 4, 5, 6, 7, 8, 9],
[10,11,12,13,14,15,16,17,18,19]]
Run Code Online (Sandbox Code Playgroud)

变成这样的东西:

[[0, 1, 2, 3, 4],
[10,11,12,13,14],
[ 5, 6, 7, 8, 9],
[15,16,17,18,19]]
Run Code Online (Sandbox Code Playgroud)

hpa*_*ulj 5

这种重塑的问题,以前也曾出现过。但不是搜索,我将快速演示一个 numpy 方法

制作您的样本数组:

In [473]: x=np.arange(20).reshape(2,10)
In [474]: x
Out[474]: 
array([[ 0,  1,  2,  3,  4,  5,  6,  7,  8,  9],
       [10, 11, 12, 13, 14, 15, 16, 17, 18, 19]])
Run Code Online (Sandbox Code Playgroud)

使用 reshape 将其分成 5 个块

In [475]: x.reshape(2,2,5)
Out[475]: 
array([[[ 0,  1,  2,  3,  4],
        [ 5,  6,  7,  8,  9]],

       [[10, 11, 12, 13, 14],
        [15, 16, 17, 18, 19]]])
Run Code Online (Sandbox Code Playgroud)

并使用转置对维度重新排序,实际上对这些行重新排序

In [476]: x.reshape(2,2,5).transpose(1,0,2)
Out[476]: 
array([[[ 0,  1,  2,  3,  4],
        [10, 11, 12, 13, 14]],

       [[ 5,  6,  7,  8,  9],
        [15, 16, 17, 18, 19]]])
Run Code Online (Sandbox Code Playgroud)

和另一个形状来巩固第一个二维

In [477]: x.reshape(2,2,5).transpose(1,0,2).reshape(4,5)
Out[477]: 
array([[ 0,  1,  2,  3,  4],
       [10, 11, 12, 13, 14],
       [ 5,  6,  7,  8,  9],
       [15, 16, 17, 18, 19]])
Run Code Online (Sandbox Code Playgroud)

如果x已经是一个 numpy 数组,这些转置和重塑操作很便宜(时间明智)。如果x真的是嵌套列表,那么使用列表操作的其他解决方案会更快,因为制作 numpy 数组有开销。