在未排序的float列表中查找最接近元素的索引的最快方法

安德烈·普罗诺比斯

给定一个未排序的浮点列表作为输入,找到最接近的元素到某个值的索引的最有效方法是什么?我想到了一些潜在的解决方案:

为了:

x = random.sample([float(i) for i in range(1000000)], 1000000)

1)自己的功能:

def min_val(lst, val):
    min_i = None
    min_dist = 1000000.0
    for i, v in enumerate(lst):
        d = abs(v - val)
        if d < min_dist:
            min_dist = d
            min_i = i
    return min_i

结果:

%timeit min_val(x, 5000.56)
100 loops, best of 3: 11.5 ms per loop

2)

%timeit min(range(len(x)), key=lambda i: abs(x[i]-5000.56))
100 loops, best of 3: 16.8 ms per loop

3)脾气暴躁(包括转换)

%timeit np.abs(np.array(x)-5000.56).argmin()
100 loops, best of 3: 3.88 ms per loop

通过该测试,似乎将列表转换为numpy数组是最好的解决方案。但是,我想到两个问题:

  1. 那确实是一个现实的比较吗?
  2. numpy解决方案是在Python中实现此目标的最快方法吗?
约翰·珀西瓦尔·哈克沃思

考虑QuickSort中分区算法分区算法重新排列列表,以使枢轴元素在调用后位于其最终位置。然后,根据枢轴的值,可以对可能包含最接近目标的元素的数组部分进行分区。找到所要查找的元素或具有长度为1的分区(包含元素)后,就可以完成。

您要解决的一般问题是选择问题

在您的问题中,您想知道要使用哪种数组/列表实现,这将对性能产生影响。更大的因素将是搜索算法,而不是列表/数组表示。

根据@Andrzej的评论进行编辑

啊,那我误会了你的问题。严格来说,线性搜索始终为O(n),因此无论基础数据结构如何,Big-Oh分析范围内的效率都是相同的。这里的问题是,对于线性搜索,您需要一个很好的简单数据结构来使运行时性能尽可能地好。

Python列表是对象的引用数组,而(据我所知)Numpy数组是对象的连续数组。Numpy数组的性能更好,因为它不必取消引用对象即可获取值。

对于Python列表与Numpy数组,您的比较技术似乎是合理的。我不愿意说Numpy数组是解决问题的最快方法,但它的性能应比Python列表更好。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

在顺序数组中查找最接近的double / float的最快方法

来自分类Dev

在python的排序列表中索引元素的最快方法?

来自分类Dev

查找排序向量中最接近的索引

来自分类Dev

在python列表中查找最接近平均值的元素

来自分类Dev

在AngularJS中查找最接近的元素

来自分类Dev

从颜色列表中查找最接近的颜色

来自分类Dev

从字典列表中获取最接近的元素

来自分类Dev

在python中找到另一个项目最接近列表的哪两个元素的最快方法

来自分类Dev

Python在列表中查找项目索引的最快方法

来自分类Dev

从jQuery中的Each函数中查找最接近的元素

来自分类Dev

从跟随趋势的数组中查找最接近的元素

来自分类Dev

在一组整数中查找最接近的元素

来自分类Dev

返回与列表中给定值最接近的项目及其索引

来自分类Dev

如何获取最接近x的列表中的值的索引?

来自分类Dev

Realm-JS:在排序结果列表中查找元素索引的高效方法

来自分类Dev

在日期时间列表中查找最接近的日期

来自分类Dev

从两个数组列表中查找最接近的数字

来自分类Dev

在字典键列表中查找最接近的值Python

来自分类Dev

优化在值列表中查找最接近的值

来自分类Dev

在日期列表中查找最接近的过去日期

来自分类Dev

从列表中查找最接近的字符串匹配

来自分类Dev

使用linq在C#的列表中查找最接近的值?

来自分类Dev

在输入日期之前的列表中查找最接近的日期

来自分类Dev

从两个数组列表中查找最接近的数字

来自分类Dev

C# 在列表中查找价格最接近 0 的行

来自分类Dev

获得最接近所选选项的最快方法

来自分类Dev

获得最接近所选选项的最快方法

来自分类Dev

在排序列表中找到最接近/最接近的值

来自分类Dev

查找两个无重复的numpy数组之间最接近的对的最快方法

Related 相关文章

  1. 1

    在顺序数组中查找最接近的double / float的最快方法

  2. 2

    在python的排序列表中索引元素的最快方法?

  3. 3

    查找排序向量中最接近的索引

  4. 4

    在python列表中查找最接近平均值的元素

  5. 5

    在AngularJS中查找最接近的元素

  6. 6

    从颜色列表中查找最接近的颜色

  7. 7

    从字典列表中获取最接近的元素

  8. 8

    在python中找到另一个项目最接近列表的哪两个元素的最快方法

  9. 9

    Python在列表中查找项目索引的最快方法

  10. 10

    从jQuery中的Each函数中查找最接近的元素

  11. 11

    从跟随趋势的数组中查找最接近的元素

  12. 12

    在一组整数中查找最接近的元素

  13. 13

    返回与列表中给定值最接近的项目及其索引

  14. 14

    如何获取最接近x的列表中的值的索引?

  15. 15

    Realm-JS:在排序结果列表中查找元素索引的高效方法

  16. 16

    在日期时间列表中查找最接近的日期

  17. 17

    从两个数组列表中查找最接近的数字

  18. 18

    在字典键列表中查找最接近的值Python

  19. 19

    优化在值列表中查找最接近的值

  20. 20

    在日期列表中查找最接近的过去日期

  21. 21

    从列表中查找最接近的字符串匹配

  22. 22

    使用linq在C#的列表中查找最接近的值?

  23. 23

    在输入日期之前的列表中查找最接近的日期

  24. 24

    从两个数组列表中查找最接近的数字

  25. 25

    C# 在列表中查找价格最接近 0 的行

  26. 26

    获得最接近所选选项的最快方法

  27. 27

    获得最接近所选选项的最快方法

  28. 28

    在排序列表中找到最接近/最接近的值

  29. 29

    查找两个无重复的numpy数组之间最接近的对的最快方法

热门标签

归档