从 Python 中排序的数组中最接近的数字返回索引

卢克

我有两个带有时间戳(浮点值)的排序数组,我想为每个值找到最接近的值,然后获取该值的索引。

到目前为止,这是我的代码,但我正在寻找更快的东西。我还检查了其他解决方案,但到目前为止没有一个更快......

t = 带有所有时间戳的数组 01

    for index, time in enumerate(timestamps_array02):   
        #find closest timestamp
        i = bisect_left(t, float (time))
        value = min(t[max(0, i-1): i+2], key=lambda t: abs(float(time) - float(t)))
        idx = np.where(t==value) #Getting the index
        x.append(gps[idx[0][0]])
保罗·潘泽

np.searchsorted是二分法的矢量化版本。在我有限的测试中,它给出与您的代码相同的结果,但速度要快得多:

m, n = 100, 100
OP                    1.39766530 ms
pp0                   0.00914090 ms
m, n = 2000, 100
OP                    2.14626830 ms
pp0                   0.01182020 ms
m, n = 100000, 10000
OP                  798.53475470 ms
pp0                   0.48502260 ms

代码:

import numpy as np
from bisect import bisect_left
from heapq import merge
from timeit import timeit
import types

def mock_data(m, n):
    t0 = np.cumsum(np.random.randint(1, 3*np.maximum(1, n//m), (m,)))
    t1 = np.cumsum(np.random.randint(1, 3*np.maximum(1, m//n), (n,)))
    return t0, t1

def f_OP(t, timestamps_array02):
    x = []
    for index, time in enumerate(timestamps_array02):   
        #find closest timestamp
        i = bisect_left(t, float (time))
        value = min(t[max(0, i-1): i+2], key=lambda t: abs(float(time) - float(t)))
        idx = np.where(t==value) #Getting the index
        x.append(idx[0][0])
    return x

def f_pp0(t0, t1):
    idx = t0.searchsorted(t1)
    over = idx.searchsorted(len(t0)-1)
    under = idx.searchsorted(0, 'right')
    idx[:under] = 1
    idx[over:] = len(t0)-1
    idx -= ((t1-t0[idx-1]) <= (t0[idx]-t1))
    return idx

for m, n in[(100, 100), (2000, 100), (100000, 10000)]:
    data = mock_data(m, n)
    ref = f_OP(*data)
    print(f'm, n = {m}, {n}')
    for name, func in list(globals().items()):
        if not name.startswith('f_') or not isinstance(func, types.FunctionType):
            continue
        try:
            assert np.all(ref==func(*data))
            print("{:16s}{:16.8f} ms".format(name[2:], timeit(
                'f(*data)', globals={'f':func, 'data':data}, number=10)*100))
        except:
            print("{:16s} apparently failed".format(name[2:]))

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

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

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

返回数组中最接近值的索引

来自分类Dev

在python中排序多维数组

来自分类Dev

Java:搜索数组中最接近的值

来自分类Dev

Python在返回索引的元组/列表列表中最快的搜索

来自分类Dev

查找与数字中最接近的因子

来自分类Dev

Python Pandas与另一个数据框的最接近索引匹配

来自分类Dev

在python中排序时列出索引超出范围

来自分类Dev

在Python中排序后,如何创建新的索引字段

来自分类Dev

舍入到给定数字数组中最接近的数字

来自分类Dev

如何在Python中找到没有重复的两个数组中最接近的元素,并在Python中返回两个数组的索引?

来自分类Dev

将字典中的值四舍五入到python中最接近的5吗?

来自分类Dev

javascript:较大一侧数组中最接近的数字

来自分类Dev

Python-用唯一数字找到最接近的更大数字

来自分类Dev

用Python中最接近的而非NaN列值填充NaN

来自分类Dev

R`summary`函数在python中最接近的等效项

来自分类Dev

在python数组中查找接近数字的值并将其编入索引

来自分类Dev

从向量中找到最接近的数字索引

来自分类Dev

将数字四舍五入到Java数组中最接近的最高数字

来自分类Dev

如何按最接近的数字对数组排序

来自分类Dev

排序最接近给定数字的数字

来自分类Dev

将数组中最接近的元素返回为整数的函数

来自分类Dev

Python:“如果最接近1”

来自分类Dev

获取数组中最接近的数字

来自分类Dev

查找数组中最接近的较高和较低的数字

来自分类Dev

Java:搜索数组中最接近的值

来自分类Dev

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

来自分类Dev

数组中最接近x的数字的索引,该数字不能大于x

来自分类Dev

如何在 Python 中找到最接近数字的值?

来自分类Dev

找出列表中最接近的较高数字和最接近的较低数字的差值

Related 相关文章

  1. 1

    返回数组中最接近值的索引

  2. 2

    在python中排序多维数组

  3. 3

    Java:搜索数组中最接近的值

  4. 4

    Python在返回索引的元组/列表列表中最快的搜索

  5. 5

    查找与数字中最接近的因子

  6. 6

    Python Pandas与另一个数据框的最接近索引匹配

  7. 7

    在python中排序时列出索引超出范围

  8. 8

    在Python中排序后,如何创建新的索引字段

  9. 9

    舍入到给定数字数组中最接近的数字

  10. 10

    如何在Python中找到没有重复的两个数组中最接近的元素,并在Python中返回两个数组的索引?

  11. 11

    将字典中的值四舍五入到python中最接近的5吗?

  12. 12

    javascript:较大一侧数组中最接近的数字

  13. 13

    Python-用唯一数字找到最接近的更大数字

  14. 14

    用Python中最接近的而非NaN列值填充NaN

  15. 15

    R`summary`函数在python中最接近的等效项

  16. 16

    在python数组中查找接近数字的值并将其编入索引

  17. 17

    从向量中找到最接近的数字索引

  18. 18

    将数字四舍五入到Java数组中最接近的最高数字

  19. 19

    如何按最接近的数字对数组排序

  20. 20

    排序最接近给定数字的数字

  21. 21

    将数组中最接近的元素返回为整数的函数

  22. 22

    Python:“如果最接近1”

  23. 23

    获取数组中最接近的数字

  24. 24

    查找数组中最接近的较高和较低的数字

  25. 25

    Java:搜索数组中最接近的值

  26. 26

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

  27. 27

    数组中最接近x的数字的索引,该数字不能大于x

  28. 28

    如何在 Python 中找到最接近数字的值?

  29. 29

    找出列表中最接近的较高数字和最接近的较低数字的差值

热门标签

归档