栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

查找一个数组与另一个数组中所有值的最接近索引-Python / NumPy

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

查找一个数组与另一个数组中所有值的最接近索引-Python / NumPy

这是一种

np.searchsorted
基于
thispost
-的矢量化方法

def closest_argmin(A, B):    L = B.size    sidx_B = B.argsort()    sorted_B = B[sidx_B]    sorted_idx = np.searchsorted(sorted_B, A)    sorted_idx[sorted_idx==L] = L-1    mask = (sorted_idx > 0) &     ((np.abs(A - sorted_B[sorted_idx-1]) < np.abs(A - sorted_B[sorted_idx])) )    return sidx_B[sorted_idx-mask]

简要说明 :

  • 获取左位置的排序索引。我们使用-

    np.searchsorted(arr1, arr2, side='left')
    或just进行此操作
    np.searchsorted(arr1, arr2)
    。现在,
    searchsorted
    期望将排序数组作为第一个输入,因此我们需要在那里做一些准备工作。

  • 比较那些左侧位置的值和其紧邻右侧位置的值,

    (left + 1)
    看看哪一个最接近。我们在计算的步骤中执行此操作
    mask

  • 根据左边的还是最右边的,选择相应的。这是通过对索引进行减法来完成的,将

    mask
    值作为偏移量转换为
    ints

标杆管理

原始方法-

def org_app(myArray, refArray):    out1 = np.empty(myArray.size, dtype=int)    for i, value in enumerate(myArray):        # find_nearest from posted question        index = find_nearest(refArray, value)        out1[i] = index    return out1

时间和验证-

In [188]: refArray = np.random.random(16)     ...: myArray = np.random.random(1000)     ...:In [189]: %timeit org_app(myArray, refArray)100 loops, best of 3: 1.95 ms per loopIn [190]: %timeit closest_argmin(myArray, refArray)10000 loops, best of 3: 36.6 µs per loopIn [191]: np.allclose(closest_argmin(myArray, refArray), org_app(myArray, refArray))Out[191]: True

50x+
加快发布的样本的速度,希望对更大的数据集有更多的速度!



转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/661851.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号