Skip to content

numpy.delete(): Zeilen und Spalten von ndarray löschen

Python

Mit der NumPy-Funktion np.delete() can SIE JEDE Zeile und Spalte aus dem NumPy-Array ndarray löschen.

Geben Sie die Achse (Dimension) und die Position (Zeilennummer, Spaltennummer usw.) an. Es ist auch möglich, mehrere Zeilen und Spalten mit einem Slice oder einer Liste auszuwählen.

Dieser Artikel hat folgenden Inhalt.

  • Grundlegende Verwendung von np.delete()
    • Geben Sie den Index (Zeilen-/Spaltennummer) an:obj
    • Geben Sie die Achse an:axis
  • Löschen Sie mehrere Zeilen und Spalten auf einmal
    • Verwenden Sie eine Liste
    • Verwenden Sie eine Scheibe
    • Zeilen und Spalten löschen
  • Beispiel für mehrdimensionale Arrays

In den following Artikeln erfahren SIE, wie SIE Elemente, Zeilen und Spalten gemäß Bedingungen löschen, anstatt die Position nach Index anzugeben, und wie SIE Zeilen und Spalten löschen, sterben den fehlenden Wert NaN enthalten.

Verwenden Sie reshape(), um die Form zu ändern.

Grundlegende Verwendung von np.delete()

np.delete() nimmt drei Parameter wie folgt.

  • numpy.delete (arr, obj, Achse = Keine)
    • arr: Eingabearray
    • obj: Zeilen- oder Spaltennummer, die gelöscht werden soll
    • Achse: Zu löschende Achse

Um beispielsweise die zweite Zeile zu löschen, setzen Sie obj=1, axis=0. Nichtsdestotrotz werden später beschrieben. Das ursprüngliche ndarray wird nicht geändert und eine neue Kopie von ndarray wird zurückgegeben.

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

Geben Sie den Index (Zeilen-/Spaltennummer) an:obj

Geben Sie im zweiten Parameter obj den zu löschenden Index (Zeilen-/Spaltennummer) an. Index beginnt bei 0.

Die Angabe eines nicht vorhandenen Index löst einen Fehler aus.

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

Geben Sie die Achse an:axis

Geben Sie im dritten Parameter axis die zu löschende Achse (Dimension) an. Die Achsnummer beginnt bei 0.

Bei einem zweidimensionalen Array ist die Zeile die erste Dimension (Achse=0) und die Spalte die zweite Dimension (Achse=1).

Die Angabe einer nicht vorhandenen Dimension löst einen Fehler aus.

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

Bei axis=None wird das Element an dem durch obj angegebenen Index nach dem Abflachen auf eine Dimension gelöscht. Der Standardwert für Achse ist Keine.

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]

Löschen Sie mehrere Zeilen und Spalten auf einmal

Mehrere Zeilen und Spalten können auf einmal gelöscht werden, wodurch im zweiten Parameter obj. eine Liste oder ein Slice angegeben wird.

Verwenden Sie eine Liste

Geben Sie die Zeilennummern und Spaltennummern an, die in einer Liste oder Einem Array gelöscht werden sollen.

print(np.delete(a, [0, 3], 1))
# [[ 1  2]
#  [ 5  6]
#  [ 9 10]]

print(np.delete(a, [0, 1, 3], 1))
# [[ 2]
#  [ 6]
#  [10]]

Verwenden Sie eine Scheibe

Es ist auch möglich, mehrere Zeilen und Spalten anzugeben, indem Sie ein Segment verwenden, das einen Bereich mit [start:stop:step] angibt.

Weitere Informationen zu den Grundlagen des Slicens und zum Slicen von Objekten mit Slice() finden Sie im following Artikel:

Scheibe()

Erstellen Sie mit slice() ein Slice-Objekt und geben Sie es als second Parameter obj an.

Es ist äquivalent zu [:stop], wenn es nur ein Argument gibt, [start:stop], wenn es zwei gibt, und [start:stop:step], wenn es drei gibt. Wenn Sie weglassen möchten, geben Sie None explizit an.

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_[]

Verwenden Sie numpy.s_[], wenn Sie in der Form [start:stop:step] schreiben möchten.

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

Zeilen und Spalten löschen

Mit np.delete() können Sie nicht mehrere Dimensionen (z. B. Zeilen und Spalten) gleichzeitig löschen. Wenn Sie andere Dimensionen löschen möchten, wiederholen Sie np.delete().

print(np.delete(np.delete(a, 1, 0), 1, 1))
# [[ 0  2  3]
#  [ 8 10 11]]

Beispiel für mehrdimensionale Arrays

Bisher wurde es der Einfachheit halber in Form von Zeilen und Spalten beschrieben, aber das Konzept ist dasselbe im Fall von drei oder mehr Dimensionen.

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)

Maße in Achse und Index im Objekt angeben.

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

Mehrere Spezifikationen pro Liste oder Slice können auf dieselbe Weise geschrieben werden.

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