Chcę uzyskać indeks największych n wartości w wielowymiarowej tablicy numpy. Aby uzyskać indeks największych n wartości w jednowymiarowej tablicy numpy, znalazłem to. Po przetestowaniu w powłoce interaktywnej w python, wydaje się, że bottleneck.argpartsort
nie może działać na wielowymiarową tablicę numpy. Aby uzyskać indeks największej wartości w wielowymiarowej tablicy numpy, znalazłem to. Nie można uzyskać największego n. Metoda, którą mogę dać, to przetłumaczyć wielowymiarową tablicę numpy na listę {value:index}
(indeks jest prezentowany przez krotkę), a następnie posortuj listę według wartości i pobierz indeks. Czy jest coś łatwiejszego lub bardziej wydajnego?
Odpowiedzi:
4 dla odpowiedzi № 1Nie mam dostępu do bottleneck
, więc w tym przykładzie używam argsort
, ale powinieneś być w stanie używać go w taki sam sposób:
#!/usr/bin/env python
import numpy as np
N = 4
a = np.random.random(20).reshape(4, 5)
print(a)
# Convert it into a 1D array
a_1d = a.flatten()
# Find the indices in the 1D array
idx_1d = a_1d.argsort()[-N:]
# convert the idx_1d back into indices arrays for each dimension
x_idx, y_idx = np.unravel_index(idx_1d, a.shape)
# Check that we got the largest values.
for x, y, in zip(x_idx, y_idx):
print(a[x][y])