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

0 投票
2 回答
2021 浏览
提问于 2025-04-18 04:20

给定的值是6.6。但是在下面的数据数组中,并没有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 个回答

3

你可以这样做:

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

输出结果:

6.7
  1. 计算每个元素的绝对差值
  2. 从结果中找到最小值,并获取对应的元素索引

补充说明:对于二维数组:

如果你使用的是 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

我觉得这是最简单的方法。

>>> 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 这两个函数。

撰写回答