2017-10-18 126 views
0

Python中是否有任何簡短的方式來打印一個更大的矩陣像這樣的子矩陣不使用for循環?如何在python中打印子矩陣?

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

sub1 = matrix[1:2][1:2] 
>>>desired answer: [[6,7][10,11]] 
1 2 3 4 
5 *6 7* 8 
9 *10 11* 12 
13 14 15 16 

sub2 = matrix[2][1:3] 
>>>desired answer: [[7,11,15]] 
1 2 3 4 
5 6 *7* 8 
9 10 *11* 12 
13 14 *15* 16 

extra:對於後面的例子,如何以不使用reverse()的反向格式返回它?即:[15,11,7][16,15,14]

+0

他添加了numpy標籤,我只考慮numpy數組(正如我所提到的)。不過謝謝! – sascha

+1

@sascha哦,有趣的一點 - 我想這不是清楚這些應該是numpy矩陣還是列表清單。 –

+1

假設numpy數組(你標記了它):如果你想做sub1 = matrix [1:3,1:3](包圍!),你會達到你想要的答案!你知道Python的切片風格模仿numpy(包括,獨家)嗎?例2:矩陣[1:4,2]。 (包圍!)對於列表(沒有numpy)列表,看看湯姆的答案! (由於錯誤和編輯時間已經結束,因此修改了此評論) – sascha

回答

2

對於列表的列表,你可以得到你想要的結果是這樣的:

>>> [s[1:3] for s in matrix[1:3]] 
[[6, 7], [10, 11]] 
>>> 
>>> [s[2:3] for s in matrix[1:4]] 
[[7], [11], [15]] 
>>> 

注意,後者是一個垂直切片,所以每個元素都被包裹在自己的名單。另請注意,這是Python索引,因此範圍說明符中的第二個限制比片中的最後一個索引高一個。

+0

謝謝!爲我工作。你是否會提供numpy解決方案以供進一步參考。 – DragonKnight

+1

@DragonKnight numpy-solution在評論中! – sascha

+1

查看numpy解決方案的頂級評論 - 查看sascha和coldspeed的評論。 –