4

m x 3行列Aとその行サブセットB( n x 3)があります。どちらも、別の大きな 4D 行列へのインデックスのセットです。それらのデータ型はdtype('int64')です。行が含まれていない場合x、ブール値ベクトルを生成したいと思います。x[i] = TrueBA[i,:]

Aまたはのどちらにも重複する行はありませんB

Numpyでこれを行う効率的な方法があるかどうか疑問に思っていましたか? 多少関連する答えを見つけました: https://stackoverflow.com/a/11903368/265289 ; ただし、実際の行を返します (ブール ベクトルではありません)。

4

3 に答える 3

0

とを XYZ 配列の 2 つのセットとして扱いA、それらの間の をで計算できます。ゼロ距離は私たちにとって興味深いものです。この距離計算は非常に効率的な実装であると考えられているため、問題を解決するための効率的なソリューションが得られることを願っています。したがって、そのようなブール出力を見つけるための実装は次のようになります-Beuclidean distancesscipy.spatial.distance.cdist

from scipy.spatial import distance

out = ~np.any(distance.cdist(A,B)==0,1)
# OR np.all(distance.cdist(A,B)!=0,1)

サンプルラン -

In [582]: A
Out[582]: 
array([[0, 2, 2],
       [1, 0, 3],
       [3, 3, 3],
       [2, 0, 3],
       [2, 0, 1],
       [1, 1, 1]])

In [583]: B
Out[583]: 
array([[2, 0, 3],
       [2, 3, 3],
       [1, 1, 3],
       [2, 0, 1],
       [0, 2, 2],
       [2, 2, 2],
       [1, 2, 3]])

In [584]: out
Out[584]: array([False,  True,  True, False, False,  True], dtype=bool)
于 2015-06-25T12:01:09.933 に答える