【问题标题】:Get index of the element nearest to the given value [duplicate]获取最接近给定值的元素的索引[重复]
【发布时间】:2014-06-12 01:37:34
【问题描述】:

给定值为 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)

【问题讨论】:

  • @YuvalAdam 正在寻找更直接的方法。@merlin2011
  • 你能假设数组是排序的吗?请提供更多详细信息。
  • @EML 索引位置应该与原始数组完全一致
  • 更“直接”的方式是什么意思?查看偏移量似乎是最好的方法。

标签: python numpy scipy


【解决方案1】:

你可以这样:

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

输出:

6.7
  1. 找出每个元素的绝对差异
  2. 从结果中求最小值,从索引中获取元素

编辑:对于 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)

【讨论】:

  • 数据形状为二维数组
  • 在您最初的问题中,它不是 2d。你能告诉我你想要一个最接近的值还是每一行的最小值?
  • 一个最接近的值
  • 抱歉我改成2d因为我发错了
  • 请找到我编辑的答案。
【解决方案2】:

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

>>> 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 函数。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-04-03
    • 1970-01-01
    相关资源
    最近更新 更多