2012-10-10 140 views
2

假设我有在Python以下矩阵:切片蟒蛇矩阵成象限

[[1,2,3,4], [5,6,7,8], [9,10,11,12], [13,14,15,16]]

我想将它切成以下矩阵(或象限/角):

[[1,2], [5,6]] 

[[3,4], [7,8]] 

[[9,10], [13,14]] 

[[11,12], [15,16]] 

是这在python中支持标准的切片运算符还是需要使用像numpy这样的扩展库?

+0

如果你需要做到这一点,我想你可能应该使用numpy – wim

回答

7

如果你总是用一个4x4矩阵工作:

a = [[1 ,2 , 3, 4], 
    [5 ,6 , 7, 8], 
    [9 ,10,11,12], 
    [13,14,15,16]] 

top_left = [a[0][:2], a[1][:2]] 
top_right = [a[0][2:], a[1][2:]] 
bot_left = [a[2][:2], a[3][:2]] 
bot_right = [a[2][2:], a[3][2:]] 

你也可以为任意大小矩阵做同样的:

h = len(a) 
w = len(a[1]) 
top_left = [a[i][:h/2] for i in range(w/2)] 
top_right = [a[i][h/2:] for i in range(w/2)] 
bot_left = [a[i][:h/2] for i in range(w/2, w)] 
bot_right = [a[i][h/2:] for i in range(w/2, w)] 
+0

完美。谢谢一堆! – mountaineer1980

+0

写得很好的代码。谢谢 ! – CyprUS

0
>>> a = [[1,2,3,4], [5,6,7,8], [9,10,11,12], [13,14,15,16]] 
>>> x = map(lambda x:x[:2], a) 
>>> x 
[[1, 2], [5, 6], [9, 10], [13, 14]] 
>>> y = map(lambda x: x[2:], a) 
>>> y 
[[3, 4], [7, 8], [11, 12], [15, 16]] 
>>> x[:2] + y[:2] + x[2:] + y[2:] 
[[1, 2], [5, 6], [3, 4], [7, 8], [9, 10], [13, 14], [11, 12], [15, 16]]