我想将4x4数组划分为四个2x2数组列表的列表。这
| 0 1 2 3 |
| 4 5 6 7 |
| 8 9 10 11 |
|12 13 14 15 |
应该分为四个区块
| |0 1| |2 3 | |
| |4 5| |6 7 | |
| |
| | 8 9| |10 11| |
| |12 13| |14 15| |
因此,如果我访问块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| |
即我得到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]])]]
?
这可以直接通过重塑和转置来完成:
> a = np.arange(16).reshape((4, 4))
> a
array([[ 0, 1, 2, 3],
[ 4, 5, 6, 7],
[ 8, 9, 10, 11],
[12, 13, 14, 15]])
> a.reshape((2, 2, 2, 2)).transpose((0, 2, 1, 3))
array([[[[ 0, 1],
[ 4, 5]],
[[ 2, 3],
[ 6, 7]]],
[[[ 8, 9],
[12, 13]],
[[10, 11],
[14, 15]]]])
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句