有没有更快的方法来搜索 numpy 数组

Sco*_*ott 3 python arrays numpy python-2.7

我有一个大约 3125000 个条目的 numpy 数组,数据是使用以下 dtype 构建的

dt = np.dtype([('startPoint', '<u8' ), ('endPoint', '<u8')])
Run Code Online (Sandbox Code Playgroud)

数据来自先前已按 endPoint 排序的文件,然后再读入数组。

我现在需要搜索数组并检查它是否包含特定端点,我使用以下代码使用二进制搜索来执行此操作

def binarySearch(array, index):
lowPoint = 0
highpoint = len(array) - 1


while (lowPoint <= highpoint):
    midPoint = int((lowPoint + highpoint) / 2)

    if(index == array[midPoint]['endPoint']):
        return midPoint

    elif(index < array[midPoint]['endPoint']):
        highpoint = midPoint - 1

    else:
        lowPoint = midPoint + 1

return -1
Run Code Online (Sandbox Code Playgroud)

我的问题是有没有一种更快的方法来搜索这个数组中的条目。就像有一个内置的 Numpy 搜索可能比我的二分搜索更快。

Mai*_*Mai 6

尝试一下,如果数组太大,numpy.searchsorted也可以使用内存映射。searchsorted 是作为二分搜索实现的。

  • 因此,当搜索排序完成后,我应该在返回的索引处查看数组,看看它是否是我正在搜索的元素?`def contains(array, x): return x == array[array.searchsorted(x)]` 这是一个很好的用法示例吗? (2认同)