Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/python-3.x/19.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python Numpy`searchsorted`比我的二进制搜索函数慢得多_Python_Python 3.x_Numpy_Binary Search - Fatal编程技术网

Python Numpy`searchsorted`比我的二进制搜索函数慢得多

Python Numpy`searchsorted`比我的二进制搜索函数慢得多,python,python-3.x,numpy,binary-search,Python,Python 3.x,Numpy,Binary Search,我正在试验二进制搜索,当我的版本运行时,我想我会将它的速度与NumPy的进行比较。我对结果感到相当惊讶,原因有二 我知道二进制搜索应该随着logn的增长而增长,我的也是,但是NumPy是线性增长的 不仅如此,NumPy的速度也很慢——在开始时,当然是在结束时 我附上了一张结果图表。橙色是黄色的,蓝色是我的。左边是查找列表中最后一项所用的时间(以毫秒为单位)(items[-1]),底部显示列表的长度。我还进行了检查,以确保我的代码返回正确的值,并且它是正确的 如果我不清楚的话,我的问题基本上是“为

我正在试验二进制搜索,当我的版本运行时,我想我会将它的速度与NumPy的进行比较。我对结果感到相当惊讶,原因有二

  • 我知道二进制搜索应该随着logn的增长而增长,我的也是,但是NumPy是线性增长的
  • 不仅如此,NumPy的速度也很慢——在开始时,当然是在结束时
  • 我附上了一张结果图表。橙色是黄色的,蓝色是我的。左边是查找列表中最后一项所用的时间(以毫秒为单位)(
    items[-1]
    ),底部显示列表的长度。我还进行了检查,以确保我的代码返回正确的值,并且它是正确的

    如果我不清楚的话,我的问题基本上是“为什么”两个1和2

    #binary_search.py
    从输入导入可编辑
    来自numba import njit
    从a.typed导入列表
    def_find(项:Iterable[int],to_find:int):
    最小值=-1
    最大值=长度(项目)
    尽管如此:
    拆分=整数((最大+最小)/2)
    项目=项目[拆分]
    如果项==要查找:
    返回分割
    elif最大值==最小值:
    打印(最小值、最大值)
    打印(项目)
    打印(要查找)
    打印(拆分)
    退出()
    要查找的elif项目>:
    最大值=拆分-1
    elif项目<要查找:
    最小=拆分+1
    def findsorted(_items:Iterable[int],to_find:int):
    项目=\u项目
    返回_查找(项目,要查找)
    
    #graph_results.py
    将二进制搜索作为bs导入
    导入系统
    导入时间
    将numpy作为np导入
    从matplotlib导入pyplot作为plt
    迭代次数=int(sys.argv[1])
    项目=[0,1]
    lx=[]
    ly=[]
    nx=[]
    纽约=[]
    对于范围内的i(2,迭代):
    l_平均时间=[]
    n_平均时间=[]
    项目。追加(项目[-1]+1)
    对于范围(0,100)内的uu:
    to_find=项目[-1]
    lstart=time.time()
    bs.findsorted(项目,待查找)
    lend=time.time()
    nstart=借出
    np.searchsorted(要查找的项目)
    nend=时间。时间()
    ltotal=开始
    ntotal=nend nstart
    l_平均时间。追加(ltotal)
    n_平均时间。追加(n总计)
    追加(
    圆的(
    总和(l_平均次)/len(l_平均次),
    1000
    )*1000
    )
    lx.附加(i)
    纽约州(
    圆的(
    总和(n_平均次)/len(n_平均次),
    1000
    )*1000
    )
    nx.append(i)
    plt.绘图(lx,ly)
    plt.绘图(纽约州西北部)
    plt.show()
    
    您是否确保这两个函数的行为也相同(对于所有
    a
    b
    ?),您的实现不需要为
    b
    使用数组,而Numpy需要数组@AKX所以,如果我有一个大列表,并且想要找到一个项目的位置,最好的解决方案不是使用numpy,而是使用我自己的代码?@AKX我刚刚检查过,它们是相等的,传入的列表和结果都是一样的。@LD实际上,这似乎是标准的Python发行版