查找

2015-04-17 29 views
5

我使用查找

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

找到具有最小絕對差的值數組索引中的第二最接近的指數值。

但是,有沒有一個很好的乾淨的方式,例如這樣找到第二個最接近索引的值?

+0

我會懷疑它,說實話!你可以得到排序的差異和第二小的索引。 – jonrsharpe

+0

如果兩個指標的值接近,應該返回什麼? –

+0

@jonrsharpe,好吧我想我會這樣做,謝謝! – Aphire

回答

9

我想這樣的作品

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... 
+0

完美,謝謝! – Aphire

7

你可以得到第k個數組a的最小元素的索引,而無需使用整個數組排序argpartition

np.argpartition(a, k)[k] 
+2

這對於大型數組來說當然是可取的,因爲它在複雜度上是'O(n)'(而常規的全分類通常是'O(n * log(n))')(+1)。 –

+0

幸運的是,數組並不是非常大,所以我使用上面的答案和它的工作,但是感謝提供更有效的方法,我有一些大的數據集,這可能有助於 – Aphire