获取最接近给定值的元素的索引

时间:2014-04-26 08:08:32

标签: python numpy scipy

给定值为6.6。但值6.6不在数组中(下面的数据)。 但是给定值的最接近值是6.7。我怎么能得到这个职位?

import numpy as np
data = np.array([[2.0, 3.0, 6.5, 6.5, 12.0],[1,2,3,4,5]],dtype=float)

2 个答案:

答案 0 :(得分:2)

你可以这样:

data[(np.fabs(data-6.6)).argmin(axis=0)]

输出:

6.7
  1. 在每个元素上找到绝对差异
  2. 从结果中找出最小值并从索引
  3. 获取元素

    编辑:2d:

    如果是python 2.x:

    map(lambda x:x[(np.fabs(x-6.6)).argmin(axis=0)], data)
    

    python 3.x:

    [r for r in map(lambda x:x[(np.fabs(x-6.6)).argmin(axis=0)], data)]
    

    导致每行返回最接近的值。

    所有人的一个价值:

    data=data.flatten()
    print data[(np.fabs(data-6.6)).argmin(axis=0)]
    

    每行的索引位置:

    ip = map(lambda x:(np.fabs(x-6.6)).argmin(axis=0), data)
    

答案 1 :(得分:1)

这是我认为最简单的方式。

>>> data = np.array([[2.0, 3.0, 6.5, 6.5, 12.0],[1,2,3,4,5]], dtype=float)
>>> data2 = np.fabs(data - 6.6)
>>> np.unravel_index(data2.argmin(), data2.shape)
(0, 2)

请参阅np.argminnp.unravel_index功能。