Szukaj…


Filtrowanie danych za pomocą tablicy boolowskiej

Gdy tylko jeden argument dostarczane do NumPy-tych where funkcjonują zwraca indeksy tablicy wejściowej (The condition ), które ocenia jako prawdziwe (samo zachowanie jak numpy.nonzero ). Można to wykorzystać do wyodrębnienia indeksów tablicy, które spełniają dany warunek.

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]

Jeśli indeksy nie są potrzebne, można to zrobić w jednym kroku za pomocą extract , w którym agian określa condition jako pierwszy argument, ale podaje array zwracającą wartości, z których warunek jest prawdziwy, jako drugi argument.

# np.extract(condition, array)
keep = np.extract(condition, a)
# keep = [ 8  9 10 11 12]

Dwie kolejne argumenty x i y mogą być dostarczane where , w przypadku których produkcja będzie zawierać wartości x , gdzie warunek jest True i wartości y , gdzie stan jest 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]])

Bezpośrednie filtrowanie indeksów

W prostych przypadkach możesz bezpośrednio filtrować dane.

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
Licencjonowany na podstawie CC BY-SA 3.0
Nie związany z Stack Overflow