Numpy:在较大的数组B中搜索具有相同图案的数组A
我有两个1D numpy阵列A(小)和B(大) 我想检查在数组B中是否检测到数组A的元素的顺序相同。 获取数组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
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)中搜索的数组的整个长度
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])