Beginnend mit dem folgenden ArrayWählen Sie Werte aus einem Array basiert auf einem Booleschen Ausdruck auf einem anderen Array angewendet
array([ nan, nan, nan, 1., nan, nan, 0., nan, nan])
, die wie so erzeugt:
import numpy as np
row = np.array([ np.nan, np.nan, np.nan, 1., np.nan, np.nan, 0., np.nan, np.nan])
Ich möchte die Indizes erhalten des sortierten Arrays und schließen Sie dann die nans
aus. In diesem Fall möchte ich [6,3]
erhalten.
Ich habe mit der folgenden Art und Weise kommen, dies zu tun:
vals = np.sort(row)
inds = np.argsort(row)
def select_index_by_value(indices, values):
selected_indices = []
for i in range(len(indices)):
if not np.isnan(values[i]):
selected_indices.append(indices[i])
return selected_indices
selected_inds = select_index_by_value(inds, vals)
Jetzt selected_inds
ist [6,3]
. Dies scheint jedoch ein paar Zeilen Code zu sein, um etwas Einfaches zu erreichen. Gibt es dafür vielleicht einen kürzeren Weg?
Beide Lösungen funktionieren, aber ich finde die Verwendung von booleschen Indizierung eleganter als Numpy 'wo'. Vielen Dank! –