2016-02-09 2 views
9

2D numpy配列の各行に最大要素のみを保持し、他の要素をすべて0に設定する最も簡潔で非凡な方法は何ですか?例:私は答えになりたいnum-inの軸別winner-take-allのpythonic way

a = [ [1, 8, 3 ,6], 
     [5, 5, 60, 1], 
     [63,9, 9, 23] ] 

b = [ [0, 8, 0, 0], 
     [0, 0, 60, 0], 
     [63,0, 0, 0 ] ] 

私はそれを解決するには、いくつかの方法を考えるが、何を私に興味がするかどうかがあることができ、次のnumpyの配列を与えられた

これはすぐにこれにPython関数です

ありがとう

+1

行の最大値に複数回達した場合、どのようなことが起こりますか? '[1,3,2,3]'? – DSM

+0

@DSMこの場合、両方とも受け入れられます –

答えて

10

あなたは、非最大の要素をゼロにnp.whereを使用し、その後、1つの軸に沿って最大値を取るためにnp.maxを使用することができます。

np.where(a == a.max(axis=1, keepdims=True), a, 0) 

keepdims=True引数は最大を取った後シングルトンの寸法を保持します(すなわち、そのようにa.max(1, keepdims=True).shape == (3, 1))、それはaとのブロードキャストを簡単にします。

0

パイソンが何であるかわからないので、私はほとんどのpython固有の文法がpythonicであると仮定します。 これは2つのリストの理解を使用しました。これはPythonの機能です。しかし、このように簡潔ではないかもしれません。

関連する問題