0

我正在寻找一种有效的方法来检查某个 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)

我当前的解决方案肯定有太多的 for 循环和 if 语句。我已经看过 numpy 数组逻辑操作,但在我看来这些并不完美,因为我的数组没有相同的长度,也不一定有相同的动物顺序!?

4

2 回答 2

3

如果您不介意使用set,则可以set使用内置函数将数组转换为 ,set()然后使用小于 -<或大于运算符 -进行子集检查>。例如,小于运算符检查左侧的集合是否是右侧集合的子集。对于大于运算符,反之亦然。

例子 -

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 回答