我想确定我的numpy向量needle
是否以切片或连续子向量的形式出现在另一个向量haystack
中。
我想要一个函数find(needle, haystack)
当且仅当存在可能的整数索引p和q这样needle
等于haystack[p:q]
时返回true,其中“等于”表示元素在所有位置都相等。
例:
find([2,3,4], [1,2,3,4,5]) == True
find([2,4], [1,2,3,4,5]) == False # not contiguous inside haystack
find([2,3,4], [0,1,2,3]) == False # incomplete
在这里,我使用列表来简化图示,但实际上它们将是numpy向量(一维数组)。
对于Python中的字符串,等效操作很简单:它是
in
:"bcd" in "abcde" == True
。关于尺寸的附录。
亲爱的读者,您可能会被类似外观的问题所吸引,例如testing whether a Numpy array contains a given row或Checking if a NumPy array contains another array。但是我们可以忽略这种相似性,因为没有考虑到尺寸。
向量是一维数组。用
numpy
术语,长度为N的向量将具有.shape == (N,)
;其形状的长度为1。其他提到的问题通常是在二维矩阵中寻找行的精确匹配。
我正在尝试像窗口一样沿一维干草堆的同一轴滑动一维针,直到整个针都与通过窗口可见的干草堆部分匹配。
最佳答案
如果可以很好地创建两个数组的副本,则可以使用Python in
运算符处理字节对象:
def find(a, b):
return a.tobytes() in b.tobytes()
print(
find(np.array([2,3,4]), np.array([1,2,3,4,5])),
find(np.array([2,4]), np.array([1,2,3,4,5])),
find(np.array([2,3,4]), np.array([0,1,2,3])),
find(np.array([2,3,4]), np.array([0,1,2,3,4,5,2,3,4])),
)
# True False False True
关于python - 我可以找出一个numpy向量是否作为另一个的切片出现吗?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/60001444/