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]


Modified text is an extract of the original Stack Overflow Documentation
Lizenziert unter CC BY-SA 3.0
Nicht angeschlossen an Stack Overflow