如果numpy数组包含b,如何有效地检查b

时间:2014-04-08 19:50:15

标签: python numpy

如何检查一个numpy数组a是否有效地包含另一个numpy数组? 有点像b是......的子集。

谢谢!

编辑: a和b是一维numpy数组

1 个答案:

答案 0 :(得分:0)

如果您要求b 连续子阵列 a

如果任何一个数组都包含重复值,从算法上讲,您的问题等同于single-pattern string-searching problem。这个问题有几种已知的算法。不幸的是,两者都不太简单。

另外,通过首先查找b中的第一个元素,然后比较以下所有元素,实现起来很简单:

import numpy as np

def is_subarray_no_repeatition(a, b):
  try:
    i = np.where(a == b[0])[0][0]
  except IndexError:
    # either b is empty, or b[0] not in a
    return b.size == 0
  a = a[i : i+b.size]
  if a.size < b.size:
    return False
  return (a == b).all()

如果您要求b成为a子集(即b的每个元素都存在于a中1}})

def is_subset(a, b):
  b = np.unique1d(b)
  c = np.intersect1d(a,b)
  return c.size == b.size