Ricerca…


Filtraggio dei dati con un array booleano

Quando viene fornito un solo argomento alla funzione di numpy in where restituisce gli indici dell'array di input (la condition ) che viene valutata come true (stesso comportamento di numpy.nonzero ). Questo può essere usato per estrarre gli indici di una matrice che soddisfano una determinata condizione.

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]

Se non si ha bisogno degli indici, questo può essere ottenuto in un solo passaggio usando extract , dove si specifica la condition come primo argomento, ma si fornisce array di restituire i valori da dove la condizione è vera come secondo argomento.

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

Due ulteriori argomenti x e y possono essere forniti per where , nel qual caso l'uscita conterrà i valori di x in cui la condizione è True ei valori di y dove la condizione è 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]])

Indici filtranti diretti

Per casi semplici, puoi filtrare i dati direttamente.

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
Autorizzato sotto CC BY-SA 3.0
Non affiliato con Stack Overflow