2017-10-18 21 views
0

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 

余分:後者の例では、reverse()を使用せずにリバース形式で戻す方法は?すなわち:[15,11,7]または[16,15,14]

+0

彼はnumpyタグを付け加えました。私はnumpy配列だけを(私が述べたように)考えます。とにかくありがとう! – sascha

+1

@saschaああ、興味深い点 - これは、それらが貧弱な行列またはリストのリストであると思われるかどうかはわからない。 –

+1

numpy-array(あなたがタグ付けしたと仮定):sub1 = matrix [1:3,1:3](ブラケッティング!)を実行すると、あなたはnumpy(包括的、排他的)で模倣されたpythonのスライススタイルについて知っていますか?実施例2:マトリックス[1:4,2]。 (ブラケッティング!)リストのリスト(numpyなし)については、Tomの答えを見てください! (間違いがあって編集時間が終わったのでこのコメントを読みました) – 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の索引付けであることにも注意してください。したがって、範囲指定子の2番目の制限は、スライスの最後の索引よりも1つ高いです。

+0

ありがとう!私のために働く。さらに参考にするために、あなたは貧弱な解決法を提供しますか? – DragonKnight

+1

@DragonKnight numpy-solutionはコメントにあります! – sascha

+1

numpyソリューションのトップレベルのコメントを参照してください - saschaとcoldspeedによるコメントを見てください。 –