获取与给定值最接近元素的索引
给定的值是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
- 计算每个元素的绝对差值
- 从结果中找到最小值,并获取对应的元素索引
补充说明:对于二维数组:
如果你使用的是 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.argmin
和 np.unravel_index
这两个函数。