2015-04-17 12 views
5

UżywamZnajdź najbliższy drugi wskaźnik do wartości

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

znaleźć indeks w tablicy z najmniejszym bezwzględną różnicę do wartości.

Czy jest jednak dobry, czysty sposób, taki jak ten, aby znaleźć najbliżej indeksu drugi?

+0

Wątpię w to, szczerze mówiąc! Możesz uzyskać posortowane różnice i zindeksować drugi najmniejszy. – jonrsharpe

+0

Co należy zwrócić, jeśli dwa indeksy są jednakowo bliskie wartości? –

+0

@jonrsharpe, okay, zgaduję, że to zrobię, dzięki! – Aphire

Odpowiedz

9

myślę, że to działa

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

Idealne, dzięki! – Aphire

7

można uzyskać indeks KTH najmniejszy element tablicy a bez sortowania całą tablicę używając argpartition

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

Jest to zdecydowanie lepsze w przypadku dużych tablic, ponieważ jest to "O (n)" w złożoności (podczas gdy regularne pełne sortowanie jest zwykle 'O (n * log (n))') (+1). –

+0

Na szczęście tablica nie jest bardzo duża, więc używam powyższej odpowiedzi i jej działa, ale dzięki za zapewnienie bardziej wydajnego sposobu, mam duże zbiory danych, które mogą być pomocne dla – Aphire