
Usando la funzione NumPy np.delete(), puoi eliminare qualsiasi riga e colonna dall’array NumPy ndarray.
Specificare l’asse (dimensione) e la posizione (numero riga, numero colonna, ecc.). È anche possibile selezionare più righe e colonne utilizzando una sezione o un elenco.
In questo articolo vengono descritti i seguenti contenuti.
- Utilizzo di base di np.delete()
- Specificare l’indice (numero riga/colonna):
obj
- Specificare l’asse (dimensione):
axis
- Specificare l’indice (numero riga/colonna):
- Elimina più righe e colonne contemporaneamente
- Usa un elenco
- Usa una fetta
- Elimina righe e colonne
- Esempio per array multidimensionali
Vedere gli articoli seguenti per come eliminare elementi, righe e colonne in base alle condizioni invece di specificare la posizione in base all’indice e come eliminare righe e colonne contenenti il valore mancante NaN.
Usa reshape() per cambiare la forma.
Utilizzo di base di np.delete()
np.delete() accetta tre parametri come segue.
- numpy.delete(arr, obj, axis=Nessuno)
- arr: matrice di input
- obj: numero di riga o colonna da eliminare
- ass: Asse da eliminare
Ad esempio, per eliminare la seconda riga, impostare obj=1, asse=0. I dettagli saranno descritti in seguito. Il ndarray originale non viene modificato e viene restituita una nuova copia di ndarray.
import numpy as np
a = np.arange(12).reshape(3, 4)
print(a)
# [[ 0 1 2 3]
# [ 4 5 6 7]
# [ 8 9 10 11]]
a_del = np.delete(a, 1, 0)
print(a_del)
# [[ 0 1 2 3]
# [ 8 9 10 11]]
print(a)
# [[ 0 1 2 3]
# [ 4 5 6 7]
# [ 8 9 10 11]]
Specificare l’indice (numero riga/colonna):obj
Specificare l’indice (numero riga/colonna) da eliminare nel secondo parametro obj. L’indice inizia da 0.
La specifica di un indice inesistente genera un errore.
print(np.delete(a, 0, 0))
# [[ 4 5 6 7]
# [ 8 9 10 11]]
print(np.delete(a, 2, 0))
# [[0 1 2 3]
# [4 5 6 7]]
# print(np.delete(a, 3, 0))
# IndexError: index 3 is out of bounds for axis 0 with size 3
Specificare l’asse (dimensione):axis
Specificare l’asse (dimensione) da eliminare nel terzo asse del parametro. Il numero dell’asse inizia da 0.
Nel caso di una matrice bidimensionale, la riga è la prima dimensione (asse=0) e la colonna è la seconda dimensione (asse=1).
La specifica di una dimensione inesistente genera un errore.
print(np.delete(a, 1, 0))
# [[ 0 1 2 3]
# [ 8 9 10 11]]
print(np.delete(a, 1, 1))
# [[ 0 2 3]
# [ 4 6 7]
# [ 8 10 11]]
# print(np.delete(a, 1, 2))
# AxisError: axis 2 is out of bounds for array of dimension 2
Con axis=None, l’elemento in corrispondenza dell’indice specificato da obj viene eliminato dopo l’appiattimento a una dimensione. Il valore predefinito per l’asse è Nessuno.
print(np.delete(a, 1, None))
# [ 0 2 3 4 5 6 7 8 9 10 11]
print(np.delete(a, 1))
# [ 0 2 3 4 5 6 7 8 9 10 11]
Elimina più righe e colonne contemporaneamente
È possibile eliminare righe e colonne contemporaneamente specificando un elenco o una sezione nel secondo parametro obj.
Usa un elenco
Specificare i numeri di riga e di colonna da eliminare in un elenco o in una matrice.
print(np.delete(a, [0, 3], 1))
# [[ 1 2]
# [ 5 6]
# [ 9 10]]
print(np.delete(a, [0, 1, 3], 1))
# [[ 2]
# [ 6]
# [10]]
Usa una fetta
È anche possibile specificare più righe e colonne utilizzando una sezione che specifica un intervallo con [start:stop:step].
Per ulteriori informazioni sulle nozioni di base per affettare e affettare oggetti con slice(), vedere il seguente articolo:
fetta()
Crea un oggetto slice() e specificalo come secondo parametro obj.
È equivalente a [:stop] se c’è un solo argomento, [start:stop] se ce ne sono due e [start:stop:step] se ce ne sono tre. Se si desidera omettere, specificare Nessuno in modo esplicito.
print(np.delete(a, slice(2), 1))
# [[ 2 3]
# [ 6 7]
# [10 11]]
print(np.delete(a, slice(1, 3), 1))
# [[ 0 3]
# [ 4 7]
# [ 8 11]]
print(np.delete(a, slice(None, None, 2), 1))
# [[ 1 3]
# [ 5 7]
# [ 9 11]]
np.s_[]
Usa numpy.s_[] se vuoi nella forma [start:stop:step].
print(np.delete(a, np.s_[:2], 1))
# [[ 2 3]
# [ 6 7]
# [10 11]]
print(np.delete(a, np.s_[1:3], 1))
# [[ 0 3]
# [ 4 7]
# [ 8 11]]
print(np.delete(a, np.s_[::2], 1))
# [[ 1 3]
# [ 5 7]
# [ 9 11]]
Elimina righe e colonne
Non è possibile eliminare più dimensioni (come righe e colonne) contemporaneamente con np.delete(). Se vuoi eliminare dimensioni diverse, nripetip.delete().
print(np.delete(np.delete(a, 1, 0), 1, 1))
# [[ 0 2 3]
# [ 8 10 11]]
Esempio per array multidimensionali
Finora, per comodità, è stato descritto in termini di riga e colonna, ma il concetto è lo stesso nel caso di tre o più dimensioni.
a_3d = np.arange(24).reshape(2, 3, 4)
print(a_3d)
# [[[ 0 1 2 3]
# [ 4 5 6 7]
# [ 8 9 10 11]]
#
# [[12 13 14 15]
# [16 17 18 19]
# [20 21 22 23]]]
print(a_3d.shape)
# (2, 3, 4)
Specificare le dimensioni in asse e l’indice in obj.
print(np.delete(a_3d, 1, 0))
# [[[ 0 1 2 3]
# [ 4 5 6 7]
# [ 8 9 10 11]]]
print(np.delete(a_3d, 1, 1))
# [[[ 0 1 2 3]
# [ 8 9 10 11]]
#
# [[12 13 14 15]
# [20 21 22 23]]]
print(np.delete(a_3d, 1, 2))
# [[[ 0 2 3]
# [ 4 6 7]
# [ 8 10 11]]
#
# [[12 14 15]
# [16 18 19]
# [20 22 23]]]
È possibile scrivere più specifiche per elenco o sezione allo stesso modo.
print(np.delete(a_3d, [0, 3], 2))
# [[[ 1 2]
# [ 5 6]
# [ 9 10]]
#
# [[13 14]
# [17 18]
# [21 22]]]
print(np.delete(a_3d, np.s_[::2], 2))
# [[[ 1 3]
# [ 5 7]
# [ 9 11]]
#
# [[13 15]
# [17 19]
# [21 23]]]