2013-02-19 17 views
9

の残りの部分に対応する値は、以下のnumpyの配列を考えてみましょう:numpyの配列の最小値を検索し、その配列の行

a = np.array([[1,4], [2,1],(3,10),(4,8)]) 

これは、次のような配列を与える:

array([[ 1, 4], 
     [ 2, 1], 
     [ 3, 10], 
     [ 4, 8]]) 

私がしようとしているのは、2番目の列(この場合は1)の最小値を見つけて、そのペアの他の値(この場合は2)を報告することです。私はargminのようなものを使用しようとしましたが、それは最初の列の1によってトリップされます。

これを簡単に行う方法はありますか?私も配列の並べ替えを検討したが、私はペアを一緒に保つように動作するように見えることはできません。データはがnumpyの配列ではないことをこれを行うための簡単な方法がありますので、もし、私があまりにも答えとしてことを取ると思い、次のようなループによって生成されている:

results = np.zeros((100,2)) 

# Loop over search range, change kappa each time 
for i in range(100): 
    results[i,0] = function1(x) 
    results[i,1] = function2(y) 

答えて

20

方法についてブレークダウン

a[np.argmin(a[:, 1]), 0] 

。第2列をつかむ

>>> a[:, 1] 
array([ 4, 1, 10, 8]) 

b。 2番目の列の最小要素のインデックスを取得します。

>>> np.argmin(a[:, 1]) 
1 

cを取得します。対応する行を取得するためのものと同じインデックスa

>>> a[np.argmin(a[:, 1])] 
array([2, 1]) 

d。そしてnp.argminを使用した最初の要素に

>>> a[np.argmin(a[:, 1]), 0] 
2 
+3

もののを私自身の正気のために、あなたはまさにこれが私のために何をするかのロジックを説明できますか?カーゴカルトコーディングを避けようとしています。 – Fomite

+0

完了 - 理にかなった希望 – YXD

5

を取る、おそらくこれに取り組むための最良の方法です。純粋なPythonでそれを行うには、使用できます。

min(tuple(r[::-1]) for r in a)[::-1]