gpt4 book ai didi

python - 在接近给定数字的python数组中查找多个值

转载 作者:太空宇宙 更新时间:2023-11-03 10:58:53 27 4
gpt4 key购买 nike

使用 Python 2.7,我有一个值数组,多次从 ~0.000 到 ~360.000。我正在尝试返回值最接近 147.010(甚至重复值)的所有数组索引,以便稍后可以使用这些索引中的每一个。例如,来自一个阵列的较小样本是:

array([  146.749,  147.249,  147.749,  146.749,  147.249,  147.749,  146.749,  147.263,  147.749,  146.472,  147.469,  148.471])

我正在寻找最接近 147.01 的索引数组或列表,在本例中为:

1, 4, 7, 10

我试过这个:

min(range(len(array)), key=lambda i: abs(array[i]-some_value))

但是当需要多个索引时,这只会返回一个索引。我看了但没有找到类似的问题或答案。感谢您的帮助。

最佳答案

如果您按照元素远离枢轴的顺序对数组进行排序,那么您将能够获取前 k 个元素,并且这些元素最接近您正在查看的元素

def k_closest(sample, pivot, k):
return sorted(sample, key=lambda i: abs(i - pivot))[:k]

例子:

>>> l = [1,2,3,4]
>>> k_closest(l, 3, 2)
[3,2]
>>> k_closest(l, 3, 3)
[3,2,4]

要同时获取元素的索引,您可以这样做:

def k_closest(sample, pivot, k):
return sorted(enumerate(sample), key=lambda (n, v): abs(v - pivot))[:k]

使用与之前相同的元素运行它,我们得到

>>> l = [1,2,3,4]
>>> k_closest(l, 3, 2)
[(2, 3), (1, 2)]
>>> k_closest(l, 3, 3)
[(2, 3), (1, 2), (3, 4)]

对于列表中的每个元组,第一个元素是原始数组中的索引,第二个是您实际感兴趣的数字

如果你只是想要索引,你可以稍微调整一下这个功能

import operator

def k_closest(sample, pivot, k):
return map(operator.itemgetter(0), sorted(enumerate(sample), key=lambda (n, v): abs(v - pivot)))[:k]

用原来的输入运行,现在会给你

>>> k_closest(l, 3, 2)
[2, 1]
>>> k_closest(l, 3, 3)
[2, 1, 3]

关于python - 在接近给定数字的python数组中查找多个值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36609547/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com