【发布时间】:2020-05-16 23:29:32
【问题描述】:
我想知道我的 numpy 向量 needle 是否作为切片或连续子向量出现在另一个向量 haystack 中。
我想要一个函数 find(needle, haystack) 当且仅当存在可能的整数索引 p 和 q 使得 needle 等于 haystack[p:q] 时返回 true,其中"equals" 表示元素在所有位置都相等。
例子:
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。
其他参考的问题是,通常寻求为二维矩阵中的行找到精确匹配。
我正试图像窗户一样沿着我的一维 干草堆 的同一轴滑动我的一维 needle,直到整个 needle em> 匹配通过窗口可见的 haystack 部分。
【问题讨论】:
-
但这些列表不是 numpy 向量。
-
如果您要针对单个“干草堆”测试多个“针”,Burrows Wheeler transform 可能会有所帮助。在这种情况下,查看 DNA 比对实现也可能会有所帮助。
标签: python numpy numpy-ndarray