簡體   English   中英

如果numpy數組包含b,如何有效地檢查b

[英]How to check efficiently if numpy array a contains b

如何檢查一個numpy數組a是否有效地包含另一個numpy數組? 有點像b是a的子集....

謝謝!

編輯:a和b是一維numpy數組

如果你問b是一個連續的子陣列 a

從算法上講,如果其中一個數組可以包含重復值,則問題等同於單模式字符串搜索問題 這個問題有幾種已知的算法。 不幸的是,兩者都不太簡單。

另外,通過首先查找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

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM