numpy
Daten filtern
Suche…
Filtern von Daten mit einem booleschen Array
Wenn nur ein einziges Argument zu numpy geliefert ist , where
Funktion es die Indizes der Eingabe Array zurückgibt (der condition
) , die als wahr (gleiches Verhalten wie bewerten numpy.nonzero
). Hiermit können die Indizes eines Arrays extrahiert werden, die eine bestimmte Bedingung erfüllen.
import numpy as np
a = np.arange(20).reshape(2,10)
# a = array([[ 0, 1, 2, 3, 4, 5, 6, 7, 8, 9],
# [10, 11, 12, 13, 14, 15, 16, 17, 18, 19]])
# Generate boolean array indicating which values in a are both greater than 7 and less than 13
condition = np.bitwise_and(a>7, a<13)
# condition = array([[False, False, False, False, False, False, False, False, True, True],
# [True, True, True, False, False, False, False, False, False, False]], dtype=bool)
# Get the indices of a where the condition is True
ind = np.where(condition)
# ind = (array([0, 0, 1, 1, 1]), array([8, 9, 0, 1, 2]))
keep = a[ind]
# keep = [ 8 9 10 11 12]
Wenn Sie die Indizes nicht benötigen, können Sie dies mithilfe von extract
in einem Schritt erreichen. Hier können Sie die condition
als erstes Argument angeben, dem array
jedoch die Werte geben, aus denen die Bedingung als zweites Argument wahr ist.
# np.extract(condition, array)
keep = np.extract(condition, a)
# keep = [ 8 9 10 11 12]
Zwei weitere Argumente x
und y
können für where
werden. In diesem Fall enthält die Ausgabe die Werte von x
wobei die Bedingung True
und die Werte von y
denen die Bedingung False
.
# Set elements of a which are NOT greater than 7 and less than 13 to zero, np.where(condition, x, y)
a = np.where(condition, a, a*0)
print(a)
# Out: array([[ 0, 0, 0, 0, 0, 0, 0, 0, 8, 9],
# [10, 11, 12, 0, 0, 0, 0, 0, 0, 0]])
Direktes Filtern von Indizes
In einfachen Fällen können Sie Daten direkt filtern.
a = np.random.normal(size=10)
print(a)
#[-1.19423121 1.10481873 0.26332982 -0.53300387 -0.04809928 1.77107775
# 1.16741359 0.17699948 -0.06342169 -1.74213078]
b = a[a>0]
print(b)
#[ 1.10481873 0.26332982 1.77107775 1.16741359 0.17699948]