Numpy:在较大的数组B中搜索具有相同模式的数组A.

时间:2017-10-18 09:31:30

标签: numpy

我有两个1D numpy数组A(小)和B(大)

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])

我想检查是否在阵列B中检测到的阵列A的元素数量相同。 从我们检测到数组A的起始位置获取数组B的索引值

Index Value returned = 6

我们是否有任何内置的numpy功能来执行此类操作?

3 个答案:

答案 0 :(得分:1)

我有时也遇到过这个问题。我认为特别是对于大型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

答案 1 :(得分:0)

我找到了一个很好的解决方案。

@EdSmith在Finding Patterns in a Numpy Array

中给出

简而言之,就是这个过程

  • 缩短要搜索的数组的长度。(我的例子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)

输出继电器

[6]

答案 2 :(得分:0)

试试这个:

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])