2017-10-18 1 views
0

Gibt es einen kurzen Weg in Python zum Drucken von Sub-Matrix einer größeren Matrix wie diese nicht mit for-Schleife?Wie Submatrix in Python drucken?

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: für das letzte Beispiel, wie man es im umgekehrten Format zurückgibt, das reverse() nicht verwendet? dh: [15,11,7] oder [16,15,14],

+0

Er fügte das numpy-Tag hinzu und ich betrachte nur numpy-arrays (wie ich bereits erwähnt habe). Danke trotzdem! – sascha

+1

@sascha Oh, interessanter Punkt - ich denke, es ist nicht klar, ob es sich um numplige Matrizen oder Listen von Listen handelt. –

+1

Angenommen numpy-arrays (Sie haben es getaggt): Wenn Sie sub1 = Matrix [1: 3,1: 3] (Klammerung!), Würden Sie Ihre gewünschte Antwort erreichen! Du kennst Pythons Slicing-Style, imitiert von numpy (inklusive, exklusiv)? Beispiel 2: Matrix [1: 4, 2]. (Bracketing!) Für eine Liste von Listen (keine Nummer), schauen Sie sich Toms Antwort an! (Erneut diesen Kommentar als es einen Fehler gab und die Bearbeitungszeit vorbei war) – sascha

Antwort

2

Für Listen von Listen können Sie Ihre gewünschte Ergebnis wie diese:

>>> [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]] 
>>> 

Beachten Sie, dass die letztere ist eine vertikale Scheibe, so dass jedes Element in seine eigene Liste gewickelt ist. Beachten Sie auch, dass dies die Python-Indizierung ist, sodass das zweite Limit in einem Bereichsspezifizierer um eins höher ist als der letzte Index im Segment.

+0

thanks! für mich arbeiten. würden Sie auch für weitere Referenz numpige Lösung bieten. – DragonKnight

+1

@DragonKnight Numpy-Lösung ist in den Kommentaren! – sascha

+1

Sehen Sie sich die Top-Level-Kommentare für die numpy Lösungen an - sehen Sie sich die Kommentare von sascha und coldspeed an. –