0

特定のnumpy配列内のすべての文字列エントリが2番目のnumpy配列に含まれているかどうかを確認する効率的な方法を探しています。以下の例を参照してください。Array_1 は、チェックする必要がある最小限の動物です。この関数は、動物が含まれていない場合、または動物の一部が含まれていない場合は False を返し、3 匹すべてが (任意の順序で) 含まれている場合は True を返します。

import numpy as np
array_1 = np.array(['cat', 'dog', 'goat'])

array_2 = np.array(['cat', 'monkey', 'zebra', 'pig', 'goat', 'horse', 'dog'])
array_3 = np.array(['peacock', 'horse', 'zebra', 'pig', 'cat', 'horse', 'dog', 'sheep'])

compare_function(array_1, array_2)

私の現在のソリューションには、内部に for ループと if ステートメントが多すぎます。私はすでにnumpy配列の論理演算を見てきましたが、配列の長さが同じではなく、必ずしも同じ動物の順序ではないため、それらは完璧ではないように思えました!?

4

2 に答える 2

3

を使用してもかまわない場合は、組み込み関数を使用しsetて配列を に変換し、小なり演算子または大なり演算子を使用してサブセット チェックを行うことができます。たとえば、より小さい演算子は、左側のセットが右側のセットのサブセットであるかどうかをチェックします。大なり演算子の場合はその逆です。setset()<>

例 -

In [8]: import numpy as np

In [9]: array_1 = np.array(['cat', 'dog', 'goat'])

In [10]:

In [10]: array_2 = np.array(['cat', 'monkey', 'zebra', 'pig', 'goat', 'horse', 'dog'])

In [11]: array_3 = np.array(['peacock', 'horse', 'zebra', 'pig', 'cat', 'horse', 'dog', 'sheep'])

In [12]:

In [12]: set(array_1) <= set(array_2)
Out[12]: True

In [13]: set(array_1) <= set(array_3)
Out[13]: False

.issubset()サブセットをチェックするために使用できる- というメソッドもあります。

例 -

In [17]: set(array_1).issubset(array_2)
Out[17]: True
于 2015-08-17T08:56:27.490 に答える
0

おそらくこれを実現する最も簡単な方法は、配列をsetsに変換してissubsetメソッドを使用することです。

于 2015-08-17T08:59:28.220 に答える