【问题标题】:Find the second closest index to value找到第二个最接近值的索引
【发布时间】:2015-04-17 10:25:38
【问题描述】:

我正在使用

index = (np.abs(array - value)).argmin()

在数组中找到与某个值的绝对差值最小的索引。

但是,有没有像这样的干净的方法来找到最接近该值的 second 索引?

【问题讨论】:

  • 说实话,我会怀疑!您可以获得排序的差异并索引第二小的差异。
  • 如果两个索引同样接近该值应该返回什么?
  • @jonrsharpe,好的,我想我会这样做的,谢谢!
  • @ajcr,我猜第二个要选择的值是 argmin() 没有选择的值(我不知道 argmin() 首先是如何选择的)

标签: python numpy


【解决方案1】:

我认为这可行

a = np.linspace(0,10,30)
array([  0.        ,   0.34482759,   0.68965517,   1.03448276,
         1.37931034,   1.72413793,   2.06896552,   2.4137931 ,
         2.75862069,   3.10344828,   3.44827586,   3.79310345,
         4.13793103,   4.48275862,   4.82758621,   5.17241379,
         5.51724138,   5.86206897,   6.20689655,   6.55172414,
         6.89655172,   7.24137931,   7.5862069 ,   7.93103448,
         8.27586207,   8.62068966,   8.96551724,   9.31034483,
         9.65517241,  10.        ])
n = np.pi
a[np.argsort(np.abs(a-n))[1]]
# Output 3.4482758620689657
# the closest value is 3.103...

【讨论】:

  • 我已经测试了这个与a[np.argpartition(np.abs(a-n),1)[1]] 的 YXD 答案,并且 plonser 答案更快,我不知道为什么。
【解决方案2】:

你可以得到数组a的第k个最小元素的索引,而无需使用argpartition对整个数组进行排序

np.argpartition(a, k)[k]

【讨论】:

  • 这对于大型数组当然更可取,因为它的复杂性是 O(n)(而常规的全排序通常是 O(n*log(n)))(+1)。
  • 幸运的是,数组根本不是很大,所以我正在使用上面的答案及其工作,但是感谢提供更有效的方法,我有一些大型数据集,这可能对
  • 什么是ak 是什么?如何实现它来解决 OP 问题?出现了很多问题,您关于文件的链接也没有提供来自 OP 的完全相同的问题。
猜你喜欢
  • 2018-05-20
  • 1970-01-01
  • 2016-07-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-08-29
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多