2017-03-05 14 views
0

誰かを助けてくれますか?私は、例えばので行列の各行と各列の最小値 - Python

matrix =[[12,34,28,16], 
     [13,32,36,12], 
     [15,32,32,14], 
     [11,33,36,10]] 

各行の最小値を取得し、この行列の各列のしようとしている:私は私のプログラムは、12のように、行1の最小値であるとことをプリントアウトしたいと思います。

+0

あなたは行を賢明かつ列方向に繰り返すことができます。各行と列の最大値と最小値を取得します。最初に各行に対してminを求めてからmaxを求めてください。次に、それを列方向にしてください。 ATB :) –

答えて

1

numpyを使用します。

>>> import numpy as np 
>>> matrix =[[12,34,28,16], 
...   [13,32,36,12], 
...   [15,32,32,14], 
...   [11,33,36,10]] 
>>> np.min(matrix, axis=1) 
array([12, 12, 14, 10]) 
>>> np.min(matrix, axis=0) 
array([11, 32, 28, 10]) 
3

のタスク文を繰り返してみましょう:「この行列の各列を各行の最小値を取得し、の」。

わかりましたので、行列がn行を持っている場合、あなたはn最小値、各行について1を取得する必要があります。興味深いね、そうじゃない?コードは次のようになります:

result1 = [<something> for row in matrix] 

まあ、各行で何をする必要がありますか?超簡単で、最小値、見つける、右:resultとして

result1 = [min(row) for row in matrix] 

を、あなたは期待と同じように、n値のリストを取得します。


待って、今では私たちはそうのは、同様にこれをやらせるではなく、各ため、各行のための最小値を見つけました!

Python 3.xを使用しているとすれば、かなり驚くべきことがいくつかあります。たとえば、あなたは簡単に列をループすることができます

zip(matrix[0], matrix[1], matrix[2], matrix[3]) 

これは非常に見ていません:

result2 = [min(column) for column in zip(*matrix)] # notice the asterisk! 

zip(*matrix)にアスタリスクがmatrixの各行このようなzip年代の別々の引数を作りますmatrix(基本的にはハードコードする必要があります)の行数に依存しています。アスタリスクを使用すると、よりクリーンなコードを書くことができます。

zip返すタプル、及びi番目のタプルはi番目の値全て行を含むので、これらのタプルは、実際に与えられた行列の列です。


このコードは少し醜いかもしれませんが、同じことをより簡潔な方法で書くことができます。確かに、いくつかの関数型プログラミングの魔法を使うことができます:

result1 = list(map(min, matrix)) 
result2 = list(map(min, zip(*matrix))) 

これらの2つのアプローチは完全に同等です。

+0

ありがとうございました!私は非常に非常に感謝します。:) –

+0

@ S.Troy、あなたはいつも歓迎です! – ForceBru

関連する問題