我的google-fu让我失望了!
我有一个numpy数组如下:
0 1 2 3
------------------------
0 | 100 110 120 130
1 | 140 150 160 170
2 | 180 190 200 210
3 | 220 230 240 250
4 | 260 270 280 290
5 | 300 310 320 330
6 | 340 350 360 370
7 | 380 390 400 410
8 | 420 430 440 450
其形状为(9, 4)
。我想将上面的数组重新整形为以下(6, 6)
数组:
0 1 2 3 4 5
-------------------------------------
0 | 100 110 | 140 150 | 180 190
1 | 120 130 | 160 170 | 200 210
-------------------------------------
2 | 220 230 | 260 270 | 300 310
3 | 240 250 | 280 290 | 320 330
-------------------------------------
4 | 340 350 | 380 390 | 420 430
5 | 360 370 | 400 410 | 440 450
我可以使用2个for
循环和一些条件来完成它。有没有更好的方法在一行代码中使用numpy.reshape
来获得相同的结果?
提前致谢。
答案 0 :(得分:3)
实际上它是(3, 3)
(2, 2)
数组的数组,因此首先将其重新整形为(3, 3, 2, 2)
数组。
然后调换它以使轴适合重新组合成(6, 6)
数组:
a.reshape(3, 3, 2, 2).transpose([0,2,1,3]).reshape(6,6)
答案 1 :(得分:0)
我做了类似但也许更直观的事情:
a = np.arange(36).reshape([9,4])
>>>
array([[ 0, 1, 2, 3],
[ 4, 5, 6, 7],
[ 8, 9, 10, 11],
[12, 13, 14, 15],
[16, 17, 18, 19],
[20, 21, 22, 23],
[24, 25, 26, 27],
[28, 29, 30, 31],
[32, 33, 34, 35]])
b = np.hstack(np.column_stack(a.reshape([3,3,2,2])))
>>>
array([[ 0, 1, 4, 5, 8, 9],
[ 2, 3, 6, 7, 10, 11],
[12, 13, 16, 17, 20, 21],
[14, 15, 18, 19, 22, 23],
[24, 25, 28, 29, 32, 33],
[26, 27, 30, 31, 34, 35]])