我正在寻找一种有效的方法来检查某个numpy数组中的所有字符串条目是否都包含在第二个numpy数组中。请参阅下面的示例。 Array_1将是应该检查的最小动物。如果没有动物或部分动物被包含,该函数应返回False,如果包含所有这三个动物(按任意顺序),则返回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)
我当前的解决方案对于循环和if语句来说肯定太多了。我已经看过numpy数组逻辑运算,但在我看来那些并不完美,因为我的数组不具有相同的长度而且不一定是相同的动物顺序!?
答案 0 :(得分:3)
如果您不介意使用set
,那么您可以使用内置函数set
将数组转换为set()
,然后使用小于 - {进行子集检查{1}}或大于运算符 - <
。例如,小于运算符检查左侧的集合是否是右侧的集合的子集。相反,大于运营商。
示例 -
>
还有一种名为 - 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()
答案 1 :(得分:0)
实现这一目标的最简单方法可能是将数组转换为set
并使用issubset方法。