English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية

Filtraggio degli array NumPy

Filtraggio degli array

Creare un nuovo array estraendo alcuni elementi da un array esistente si chiama filtraggio (filtering).

In NumPy, utilizziamo una lista di indici booleani per filtrare gli array.

Una lista di indici booleani è una lista di valori booleani che corrispondono agli indici dell'array.

se il valore all'indice è Truese l'elemento è presente nell'array filtrato; se il valore all'indice è Falsese l'elemento non è presente nell'array filtrato, allora verrà escluso.

Creare un array utilizzando gli elementi agli indici 0, 2 e 4:

import numpy as np
arr = np.array([61, 62, 63, 64, 65])
x = [True, False, True, False, True]
newarr = arr[x]
print(newarr)

Risultato dell'esecuzione:

[61 63 65]

L'esempio precedente restituirà [61, 63, 65]perché?

Poiché il nuovo filtro contiene solo i valori presenti nell'array di filtri True dei valori, quindi in questo caso, gli indici sono 0 e 2, 4.

creare un array di filtri

Nel esempio precedente, abbiamo creato un array di filtri per True e False Il valore è hard codato, ma di solito viene utilizzato per creare un array di filtri in base a condizioni.

Creare un array di filtro che restituisca solo valori superiori a 62:

import numpy as np
arr = np.array([61, 62, 63, 64, 65])
 # Creare una lista vuota
filter_arr = []
 # Eseguire un ciclo su ogni elemento di arr
for element in arr:
  # Se l'elemento è maggiore di 62, impostare il valore su True, altrimenti impostare su False:
  if element > 62:
    filter_arr.append(True)
  else:
    filter_arr.append(False)
newarr = arr[filter_arr]
print(filter_arr)
print(newarr)

Risultato dell'esecuzione:

[False, False, True, True, True]
[63 64 65]

Creare un array di filtro che restituisca solo gli elementi pari dell'array originale:

import numpy as np
arr = np.array([1, 2, 3, 4, 5, 6, 7])
 # Creare una lista vuota
filter_arr = []
 # Eseguire un ciclo su ogni elemento di arr
for element in arr:
  # Se l'elemento può essere diviso per 2 senza residuo, impostare il valore su True, altrimenti impostare su False
  if element % 2 == 0:
    filter_arr.append(True)
  else:
    filter_arr.append(False)
newarr = arr[filter_arr]
print(filter_arr)
print(newarr)

Risultato dell'esecuzione:

[False, True, False, True, False, True, False]
[2 4 6]

Creazione diretta di un array di filtro

L'esempio è un compito molto comune in NumPy, per cui NumPy offre ottime soluzioni.

Possiamo sostituire direttamente l'array nel condizionale invece della variabile iterable, e funzionerà come ci aspettiamo.

Creare un array di filtro che restituisca solo valori superiori a 62:

import numpy as np
arr = np.array([61, 62, 63, 64, 65])
filter_arr = arr > 62
newarr = arr[filter_arr]
print(filter_arr)
print(newarr)

Risultato dell'esecuzione:

[False False     True     True     True]
[63 64 65]

Creare un array di filtro che restituisca solo gli elementi pari dell'array originale:

import numpy as np
arr = np.array([1, 2, 3, 4, 5, 6, 7])
filter_arr = arr % 2 == 0
newarr = arr[filter_arr]
print(filter_arr)
print(newarr)

Risultato dell'esecuzione:

[False     True     False     True     False     True     False]
[2 4 6]