in1d
によって生成されたブール値配列を使用して、arange
のインデックスを付けることができます。
>>> a[::-1]
array([10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0])
>>> a = a[::-1]
intersect1d
はまだ同じ値...
>>> numpy.intersect1d(a, b)
array([ 2, 7, 10])
を返しますが、ブール配列in1d
返します:
>>> numpy.in1d(a, b)
array([ True, False, False, True, False, False, False, False, True,
False, False], dtype=bool)
インデックスが値と異なっているようにa
を逆転範囲をインデックスするために使用できます:
>>> numpy.arange(a.shape[0])[numpy.in1d(a, b)]
array([0, 3, 8])
>>> indices = numpy.arange(a.shape[0])[numpy.in1d(a, b)]
>>> a[indices]
array([10, 7, 2])
しかし、あなたはnonzero
を使用することができ、上記を簡単にするために - それはX
、Y
の一様なリストのタプルを返すので、これは、おそらく最も正しいアプローチです...座標:
>>> numpy.nonzero(numpy.in1d(a, b))
(array([0, 3, 8]),)
か、等価:
>>> numpy.in1d(a, b).nonzero()
(array([0, 3, 8]),)
結果が問題なくa
と同じ形状の配列へのインデックスとして使用することができます。
>>> a[numpy.nonzero(numpy.in1d(a, b))]
array([10, 7, 2])
しかし、多くの状況下で、それだけでなく非ブール指標のセットに変換するよりも、ブール配列自体を使用することが理にかなっていることに注意してください。
最後に、ブール値配列をargwhere
に渡すこともできます。これは、インデックス作成には適していないが、他の目的には便利なやや異なる形の結果を生成します。
>>> numpy.argwhere(numpy.in1d(a, b))
array([[0],
[3],
[8]])
だから荒いが、それは動作します:) 簡単にオクターブで: [間indexA indexB] =が交差(A、B) – invis
がためにあなたをたくさんありがとうあなたの答え ! – invis
in1dとintersect1dは同じではありません。 intersect1dは一意の値を与え、in1dはすべての交点を与え、この答えは常に働かない。 – Rik