誰かを助けてくれますか?私は、例えばので行列の各行と各列の最小値 - Python
matrix =[[12,34,28,16],
[13,32,36,12],
[15,32,32,14],
[11,33,36,10]]
各行の最小値を取得し、この行列の各列のしようとしている:私は私のプログラムは、12のように、行1の最小値であるとことをプリントアウトしたいと思います。
誰かを助けてくれますか?私は、例えばので行列の各行と各列の最小値 - Python
matrix =[[12,34,28,16],
[13,32,36,12],
[15,32,32,14],
[11,33,36,10]]
各行の最小値を取得し、この行列の各列のしようとしている:私は私のプログラムは、12のように、行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])
のタスク文を繰り返してみましょう:「この行列の各列を各行の最小値を取得し、の」。
わかりましたので、行列が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つのアプローチは完全に同等です。
ありがとうございました!私は非常に非常に感謝します。:) –
@ S.Troy、あなたはいつも歓迎です! – ForceBru
あなたは行を賢明かつ列方向に繰り返すことができます。各行と列の最大値と最小値を取得します。最初に各行に対してminを求めてからmaxを求めてください。次に、それを列方向にしてください。 ATB :) –