【问题标题】:Comparing numpy arrays containing strings比较包含字符串的numpy数组
【发布时间】:2015-08-17 16:59:28
【问题描述】:

我正在寻找一种有效的方法来检查某个 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 数组逻辑操作,但在我看来这些并不完美,因为我的数组没有相同的长度,也不一定有相同的动物顺序!?

【问题讨论】:

  • 完美,正是我锁定的目标。将其作为答案发布,可能与 np.mean(np.in1d(array_1, array_2)) == 1 一起发布,以防所有条目都是 True 并且我将其标记为正确的
  • 您可以简单地使用:np.in1d(array_1, array_2).all()

标签: python arrays numpy compare elementwise-operations


【解决方案1】:

如果您不介意使用 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

【讨论】:

    【解决方案2】:

    实现这一点的最简单方法可能是将数组转换为sets 并使用issubset 方法。

    【讨论】:

      猜你喜欢
      • 2021-06-20
      • 1970-01-01
      • 2015-01-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多