Numpy:在较大的数组B中搜索具有相同图案的数组A

Numpy:在较大的数组B中搜索具有相同图案的数组A,numpy,Numpy,我有两个1D numpy阵列A(小)和B(大) 我想检查在数组B中是否检测到数组A的元素的顺序相同。 获取数组B的索引值,从中我们检测到数组A的开始 Index Value returned = 6 我们是否有任何内置的numpy函数来执行这样的操作?我有时也会遇到这个问题。我认为最快的方法,尤其是对于大型numpy数组,是将它们转换为字符串,然后再执行。 以下是我使用的代码: b=np.array([6,7,8,9,10]) a=np.array([0,1,2,3,4,5,6,7,8

我有两个1D numpy阵列A(小)和B(大)

我想检查在数组B中是否检测到数组A的元素的顺序相同。 获取数组B的索引值,从中我们检测到数组A的开始

Index Value returned = 6

我们是否有任何内置的numpy函数来执行这样的操作?

我有时也会遇到这个问题。我认为最快的方法,尤其是对于大型numpy数组,是将它们转换为字符串,然后再执行。 以下是我使用的代码:

b=np.array([6,7,8,9,10])    
a=np.array([0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,10])
a.tostring().index(b.tostring())//a.itemsize

我找到了一个很好的解决办法

由@EdSmith于

简而言之,这就是过程

  • 缩短正在搜索的数组的长度。(我的示例A)
  • 使用np.where和np.all检查在(我的示例B)中搜索的数组的整个长度
这不是我的代码,而是可以在about链接中找到的代码,简单易懂。我将对其稍作修改,以适合上面的示例,希望它对其他人有所帮助:)

感谢@EdSmith

import numpy as np

A=np.array([6,7,8,9,10])

B=np.array([0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,10])

N = len(A)
possibles = np.where(B == A[0])[0]

solns = []
for p in possibles:
    check = B[p:p+N]
if np.all(check == A):
    solns.append(p)

print(solns)
输出

试试这个:

import numpy as np
A=np.array([6,7,8,9,10])
B=np.array([0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,10])
r = np.ones_like(B)
for x in range(len(A)):r*=np.roll((B==A[x]),-x)
#first index, answer: /6/ 
print(np.where(r)[0][0])

只是为了检查-你是说如果它是一个精确的子阵列。。。例如:如果
B=[…,6,7,8,9,11,10]
-这是否匹配?@JonClements是的,你猜对了。这正是我的意思。很好的临时修复。用于数组中的少量元素。我将处理数组中的大量元素。我怀疑这是否是一种有效的使用方法,首先查看需要转换为字符串并存储在虚拟内存中的数据量。
[6]
import numpy as np
A=np.array([6,7,8,9,10])
B=np.array([0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,10])
r = np.ones_like(B)
for x in range(len(A)):r*=np.roll((B==A[x]),-x)
#first index, answer: /6/ 
print(np.where(r)[0][0])