2016-09-01 1 views
3

における複数のベクトルの要素ごとの最小私はnumpyの中で、私はnumpyの

numpy.minimum(v1, v2) 

で2つのベクトルの要素ごとの最小値を計算することができることを知って、V = [v1, v2, v3, v4](リストではなく配列である) numpy.minimum(*V)を入力しても機能しません。代わりにやりたいことは何ですか?

答えて

4

*VVに配列が2つしかない場合に機能します。 np.minimumufuncで、2つの引数をとります。

ufuncとしては、.reduceという方法がありますので、リスト入力に繰り返し適用できます。

In [321]: np.minimum.reduce([np.arange(3), np.arange(2,-1,-1), np.ones((3,))]) 
Out[321]: array([ 0., 1., 0.]) 

np.minのアプローチは高速ですが、それは配列とリストのサイズによって異なる可能性があります。

In [323]: np.array([np.arange(3), np.arange(2,-1,-1), np.ones((3,))]).min(axis=0) 
Out[323]: array([ 0., 1., 0.]) 

ufuncも私たちに削減の各段階の結果を表示することができaccumulateを持っています。興味深いのではありませんが、私はそれを変更するために入力を微調整することができます。

In [325]: np.minimum.accumulate([np.arange(3), np.arange(2,-1,-1), np.ones((3,))]) 
    ...: 
Out[325]: 
array([[ 0., 1., 2.], 
     [ 0., 1., 0.], 
     [ 0., 1., 0.]]) 
4

numpyの配列に変換し、第1の軸に沿ってndarray.minを実行 -

np.asarray(V).min(0) 

あるいは単にフード下としてnp.aminを使用し、それはその軸に沿って最小値を見つける前に、アレイに入力を変換する -

np.amin(V,axis=0) 

サンプル実行 -

In [52]: v1 = [2,5] 

In [53]: v2 = [4,5] 

In [54]: v3 = [4,4] 

In [55]: v4 = [1,4] 

In [56]: V = [v1, v2, v3, v4] 

In [57]: np.asarray(V).min(0) 
Out[57]: array([1, 4]) 

In [58]: np.amin(V,axis=0) 
Out[58]: array([1, 4]) 

最終出力をリストとして出力する必要がある場合は、出力に.tolist()を追加します。