重塑 numpy 数组以包含来自原始数组的逻辑值块
Reshape numpy array to contain logical blocks of values from original array
我的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
实现相同的结果?
提前致谢。
实际上它是一个由 (2, 2)
个数组组成的 (3, 3)
数组,因此首先将其整形为 (3, 3, 2, 2)
个数组。
然后转置它,使轴正确,以便将它重新组合成一个 (6, 6)
数组:
a.reshape(3, 3, 2, 2).transpose([0,2,1,3]).reshape(6,6)
我做了类似但可能更直观的事情:
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]])
我的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
实现相同的结果?
提前致谢。
实际上它是一个由 (2, 2)
个数组组成的 (3, 3)
数组,因此首先将其整形为 (3, 3, 2, 2)
个数组。
然后转置它,使轴正确,以便将它重新组合成一个 (6, 6)
数组:
a.reshape(3, 3, 2, 2).transpose([0,2,1,3]).reshape(6,6)
我做了类似但可能更直观的事情:
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]])