我有两个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功能来执行此类操作?
答案 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
中给出简而言之,就是这个过程
这不是我的代码,而是可以在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])