我想将一个 4x4 数组划分为四个 2x2 数组的列表。这个
| 0 1 2 3 |
| 4 5 6 7 |
| 8 9 10 11 |
|12 13 14 15 |
应分为四个 block
| |0 1| |2 3 | |
| |4 5| |6 7 | |
| |
| | 8 9| |10 11| |
| |12 13| |14 15| |
所以,如果我访问 block 1 那么它应该是[2,3],[6,7]
。
我写了这个方法:
from numpy import *
from operator import itemgetter
def divide_in_blocks(A):
A1 = hsplit(A, A[0].size/2)
for i, x in enumerate(A1):
A1[i] = vsplit(x, x.size/4)
return A1
if __name__ == '__main__':
a = arange(16).reshape(4,4)
a1 = divide_in_blocks(a)
#print a
#a1 = sorted(a1, key=itemgetter(2))
print a1
将数组划分为
| |0 1| | 8 9 | |
| |4 5| |12 13 | |
| |
| |2 3| |10 11| |
| |6 7| |14 15| |
即我得到的 block 1 为 [8, 9], [12, 13]
。
代码输出:
[[array([[0, 1],
[4, 5]]),
array([[ 8, 9],
[12, 13]])],
[array([[2, 3],
[6, 7]]),
array([[10, 11],
[14, 15]])]]
有什么方法可以对这个数组列表进行排序以获得所需的输出:
[[array([[0, 1],
[4, 5]]),
array([[2, 3],
[6, 7]])],
[array([[ 8, 9],
[12, 13]]),
array([[10, 11],
[14, 15]])]]
?
最佳答案
我只会使用数组切片
>>> blocksize = 2
>>> h, w = a.shape
>>> rows = xrange(0, h, blocksize)
>>> cols = xrange(0, w, blocksize)
>>> [[a[row:row+blocksize, col:col+blocksize] for col in cols] for row in rows]
[[array([[0, 1],
[4, 5]]), array([[2, 3],
[6, 7]])], [array([[ 8, 9],
[12, 13]]), array([[10, 11],
[14, 15]])]]
关于python - 如何对 numpy 数组列表进行排序?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26782986/