Ich habe eine Reihe von Zahlen, zum Beispiel
a = np.array([1, 3, 5, 6, 9, 10, 14, 15, 56])
Ich möchte alle Indizes der Elemente innerhalb eines bestimmten Bereichs finden. Wenn der Bereich beispielsweise (6, 10) ist, sollte die Antwort (3, 4, 5) sein. Gibt es eine eingebaute Funktion, um dies zu tun?
np.nonzero(np.logical_and(a>=6, a<=10))
.np.where((a > 6) & (a <= 10))
np.logical_and
ist ein bisschen schneller als&
obwohl. Undnp.where
ist schneller alsnp.nonzero
.Wie in der Antwort von @ deinonychusaur, aber noch kompakter:
quelle
a[(a >= 6) & (a <= 10)]
wenna
es sich um ein Numpy-Array handelt.a
es sich um ein numpy Array handeltIch dachte, ich würde dies hinzufügen, weil das
a
in dem von Ihnen angegebenen Beispiel sortiert ist:quelle
quelle
Zusammenfassung der Antworten
Um zu verstehen, was die beste Antwort ist, können wir mit der anderen Lösung ein Timing durchführen. Leider war die Frage nicht gut gestellt, so dass es Antworten auf verschiedene Fragen gibt. Hier versuche ich, die Antwort auf dieselbe Frage zu verweisen. Angesichts des Arrays:
Die Antwort sollten die Indizes der Elemente zwischen einem bestimmten Bereich sein, wir nehmen an, einschließlich, in diesem Fall 6 und 10.
Entspricht den Werten 6,9,10.
Um die beste Antwort zu testen, können wir diesen Code verwenden.
Ergebnisse
Die Ergebnisse sind in der folgenden Darstellung angegeben. Oben die schnellsten Lösungen. Wenn Sie anstelle der Indizes die Werte extrahieren möchten, können Sie die Tests mit functions2 durchführen, aber die Ergebnisse sind fast gleich.
quelle
Dieses Code-Snippet gibt alle Zahlen in einem Numpy-Array zwischen zwei Werten zurück:
Es funktioniert wie folgt: (a> 6) gibt ein numpy-Array mit True (1) und False (0) zurück, ebenso (a <10). Durch Multiplizieren dieser beiden Werte erhalten Sie ein Array mit entweder True, wenn beide Anweisungen True (weil 1x1 = 1) oder False (weil 0x0 = 0 und 1x0 = 0) sind.
Der Teil a [...] gibt alle Werte von Array a zurück, wobei das Array in Klammern eine True-Anweisung zurückgibt.
Natürlich können Sie dies komplizierter machen, indem Sie zum Beispiel sagen
Dies ähnelt einer "und nicht" -Anweisung.
quelle
quelle
Wollte der Mischung numexpr hinzufügen :
Wäre nur für größere Arrays mit Millionen sinnvoll ... oder wenn Sie an Speichergrenzen stoßen.
quelle
Ein anderer Weg ist mit:
was zurückgibt:
Es ist manchmal nützlich, um Zeitreihen, Vektoren usw. zu maskieren.
quelle
Ausgabe:
quelle
Dies ist vielleicht nicht die schönste, funktioniert aber für jede Dimension
quelle
Sie können verwenden
np.clip()
, um das gleiche zu erreichen:Es enthält jedoch Werte kleiner und größer als 6 bzw. 10.
quelle