6

私は2つの配列を持っています。

a, b = np.array([13., 14., 15., 32., 33.]), np.array([15., 16., 17., 33., 34., 47.])

b に存在しない a のすべての要素のインデックスを見つける必要があります。上記の例では、結果は次のようになります。

[0, 1, 3]

a[0]、a[1]、a[3] は 13.、14.、32. であるため、b には存在しません。13.、14.、および 32. の実際の値を知りたくないことに注意してください (その場合は、set(a).difference(set(b)) を使用できます)。私は本当にインデックスだけに興味があります。

可能であれば、答えを「ベクトル化」する必要があります。つまり、for ループを使用しないでください。

4

3 に答える 3

3

np.in1dを使用できます:

>>> np.arange(a.shape[0])[~np.in1d(a,b)].tolist()
  [0, 1, 3]
于 2013-08-28T11:10:45.517 に答える
2

と の間でnumpy.intersect1d共有される要素を計算するために使用し、それらの要素のどれが使用されていないかを確認し、最後にを使用して配列内の位置を取得するのは非常に簡単です。abanumpy.in1dnumpy.argwhere

>>> import numpy as np
>>> a, b = np.array([13., 14., 15., 32., 33.]), np.array([15., 16., 17., 33., 34., 47.])
>>> np.argwhere(np.in1d(a, np.intersect1d(a,b)) == False)
array([[0],
   [1],
   [3]])

リストが必要な場合は、追加.flattenして行列をベクトルに変換し、適用.tolistしてリストを取得します。

>>> np.argwhere(np.in1d(a, np.intersect1d(a,b)) == False).flatten().tolist()
 [0, 1, 3]
于 2013-08-28T11:39:32.303 に答える