Skip to content

numpy.delete(): Elimina righe e colonne di ndarray

Python

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
  • 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]]]