3

次の問題があります。整数の 2 つの n 次元配列があり、いくつかの条件を満たすアイテムのインデックスを決定する必要があります。

  • インデックスには、「array1」に負の要素が含まれている必要があります。
  • 負の要素を持つこのサブセットのうち、「array2」で最小値を持つ必要があります。
  • 同点の場合は、「array1」の値が最も小さい値 (そうでない場合は最初の値) を選択します。

したがって、次があるとします。

array1 = np.array([1,-1,-2])
array2 = np.array([0,1,1])

次に、インデックス 2 (3 番目の数値) を返す必要があります。これを次のようにプログラムしようとしています。

import numpy as np
n = 3
array1 = np.array([1,-1,-2])
array2 = np.array([0,1,1])
indices = [i for i in range(n) if array1[i]<0] 
indices2 = [i for i in indices if array2[i] == min(array2[indices])] 
index = [i for i in indices2 if array1[i] == min(array1[indices2])][0] #[0] breaks the tie.

これは機能しているように見えますが、あまりエレガントではありません。私には、これを 1 行か 2 行で、新しい変数をあまり定義せずに行うことができるように思えます。誰かが改善のための提案を受けましたか? 前もって感謝します。

4

5 に答える 5

6

次のようにして、array1 からすべての負の要素のインデックスを取得できます。

np.where(array1 < 0)

次に、次の方法でサブセットにアクセスできます。

subset = array2[array1 < 0]

array1 の最小 (負) 値のインデックスを取得するには、array1.argmin() を使用できます。

value = array2[array1.argmin()]

すべてをまとめると、次のようになります。

value = array2[array1 < 0][array1[array1 < 0].argmin()]

ただし、array1 に正の値しかない場合は、ValueErrors をキャッチする必要があります。

于 2013-05-16T15:08:26.077 に答える