9

次の 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)
4

2 に答える 2

21

どうですか

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. そして、最初の要素を取ります

>>> a[np.argmin(a[:, 1]), 0]
2
于 2013-02-19T11:46:31.067 に答える
5

np.argminこれに取り組むには、おそらくを使用するのが最善の方法です。純粋な python でそれを行うには、次を使用できます。

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

于 2013-02-19T12:07:32.280 に答える