Skip to content

NumPy: Extrahieren oder Löschen von Elementen, Zeilen und Spalten, die die Bedingungen erfüllen

Python

In diesem Artikel WIRD beschrieben, wie SIE Elemente, Zeilen und Spalten, die sterben Bedingung erfüllen, aus dem NumPy-Array ndarray extrahieren oder löschen.

  • Extrahieren Sie Elemente, sterben sterben Bedingungen erfüllen
  • Extrahieren Sie Zeilen und Spalten, sterben sterben Bedingungen erfüllen
    • Alle Elemente erfüllen die Bedingung:numpy.all()
    • Mindestens ein Element erfüllt die Bedingung:numpy.any()
  • Löschen Sie Elemente, Zeilen und Spalten, sterben sterben Bedingungen erfüllen
    • Verwenden Sie ~ (NICHT)
    • Verwenden Sie numpy.delete() und numpy.where()
  • Mehrere Bedingungen

Im following Artikel FINDEN SIE Ein Beispiel, wenn ndarray fehlende Werte NaN enthält.

Wenn Sie ein Element ersetzen oder umfassen möchten, das sterben Bedingungen erfüllt, lesen Sie den following Artikel.

Wenn Sie Elemente extrahieren möchten, sterben sterben Bedingung erfüllen, can Sie ndarray[conditional expression] verwenden.

Auch wenn das ursprüngliche ndarray ein mehrdimensionales Array ist, wird ein vereinfachtes eindimensionales Array wiederhergestellt.

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

print(a < 5)
# [[ True  True  True  True]
#  [ True False False False]
#  [False False False False]]

print(a[a < 5])
# [0 1 2 3 4]

print(a < 10)
# [[ True  True  True  True]
#  [ True  True  True  True]
#  [ True  True False False]]

print(a[a < 10])
# [0 1 2 3 4 5 6 7 8 9]

Ein neues ndarray wird ersetzt, und das ursprüngliche ndarray bleibt unverändert. Dasselbe gilt für die folgenden Beispiele.

b = a[a < 10]
print(b)
# [0 1 2 3 4 5 6 7 8 9]

print(a)
# [[ 0  1  2  3]
#  [ 4  5  6  7]
#  [ 8  9 10 11]]

Es ist möglich, die Summe, den Durchschnitt, den Maximalwert, den Minimalwert, die Standardabweichung usw. von zu berechnen, sterben sterben Bedingung erfüllen.

print(a[a < 5].sum())
# 10

print(a[a < 5].mean())
# 2.0

print(a[a < 5].max())
# 4

print(a[a < 10].min())
# 0

print(a[a < 10].std())
# 2.8722813232690143

Extrahieren Sie Zeilen und Spalten, sterben sterben Bedingungen erfüllen

Im Beispiel zum Extrahieren von Elementen wird ein eindimensionales Array zurückgegeben, aber wenn Sie np.all() und np.any() verwenden, können Sie Zeilen und Spalten extrahieren und dabei die ursprüngliche ndarray-Dimension beibehalten.

Alle Elemente erfüllen die Bedingung:numpy.all()

np.all() ist eine Funktion, die True zurückgibt, wenn alle Elemente von ndarray, die an den ersten Parameter übergeben werden, True sind, und andernfalls False zurückgibt.

Wenn SIE den Parameter Achse angeben, wird True zurückgegeben, wenn alle Elemente für jede Achse True sind. Im Fall eines zweidimensionalen Arrays ist das Ergebnis für Spalten, wenn Achse = 0 ist, und für Zeilen, wenn Achse = 1 ist.

print(a < 5)
# [[ True  True  True  True]
#  [ True False False False]
#  [False False False False]]

print(np.all(a < 5))
# False

print(np.all(a < 5, axis=0))
# [False False False False]

print(np.all(a < 5, axis=1))
# [ True False False]

print(a < 10)
# [[ True  True  True  True]
#  [ True  True  True  True]
#  [ True  True False False]]

print(np.all(a < 10, axis=0))
# [ True  True False False]

print(np.all(a < 10, axis=1))
# [ True  True False]

Zeilen und Spalten werden erstellt, wobei jedes Ergebnis an [Zeilen, :] oder [:, Spalten] übergeben wird. Bei [rows, :] kann das nachgestellte , : weggelassen werden.

print(a[:, np.all(a < 10, axis=0)])
# [[0 1]
#  [4 5]
#  [8 9]]

print(a[np.all(a < 10, axis=1), :])
# [[0 1 2 3]
#  [4 5 6 7]]

print(a[np.all(a < 10, axis=1)])
# [[0 1 2 3]
#  [4 5 6 7]]

Wenn die Bedingung nicht erfüllt ist, wird ein leeres Ndarray zurückgegeben.

print(a[:, np.all(a < 5, axis=0)])
# []

Auch wenn nur eine Zeile oder eine Spalte extrahiert wird, ändert sich die Anzahl der Dimensionen nicht.

print(a[np.all(a < 5, axis=1)])
# [[0 1 2 3]]

print(a[np.all(a < 5, axis=1)].ndim)
# 2

print(a[np.all(a < 5, axis=1)].shape)
# (1, 4)

Mindestens ein Element erfüllt die Bedingung:numpy.any()

np.any() ist eine Funktion, die True zurückgibt, wenn ndarray, das an den ersten Parameter übergeben wird, mindestens ein True-Element enthält, und andernfalls False zurückgibt.

Wenn SIE den Parameter Achse angeben, wird True zurückgegeben, wenn mindestens ein Element für jede Achse True ist. Im Fall eines zweidimensionalen Arrays ist das Ergebnis für Spalten, wenn Achse = 0 ist, und für Zeilen, wenn Achse = 1 ist.

print(a < 5)
# [[ True  True  True  True]
#  [ True False False False]
#  [False False False False]]

print(np.any(a < 5))
# True

print(np.any(a < 5, axis=0))
# [ True  True  True  True]

print(np.any(a < 5, axis=1))
# [ True  True False]

Sie können Zeilen und Spalten extrahieren, sterben den Bedingungen auf sterben same Weise wie np.all() entsprechen.

print(a[:, np.any(a < 5, axis=0)])
# [[ 0  1  2  3]
#  [ 4  5  6  7]
#  [ 8  9 10 11]]

print(a[np.any(a < 5, axis=1)])
# [[0 1 2 3]
#  [4 5 6 7]]

Löschen Sie Elemente, Zeilen und Spalten, sterben sterben Bedingungen erfüllen

Wenn SIE Elemente, Zeilen oder Spalten löschen möchten, anstatt sie abhängig von Bedingungen zu extrahieren, gibt es sterben following zwei Methoden.

Verwenden Sie ~ (NICHT)

Wenn Sie einer Bedingung den Negationsoperator ~ hinzufügen, Werden Elemente, Zeilen und Spalten gesichert, sterben sterben Bedingung nicht erfüllen. Dies entspricht dem Löschen von Elementen, Zeilen oder Spalten, sterben sterben Bedingung erfüllen.

print(a[~(a < 5)])
# [ 5  6  7  8  9 10 11]

print(a[:, np.all(a < 10, axis=0)])
# [[0 1]
#  [4 5]
#  [8 9]]

print(a[:, ~np.all(a < 10, axis=0)])
# [[ 2  3]
#  [ 6  7]
#  [10 11]]

print(a[np.any(a < 5, axis=1)])
# [[0 1 2 3]
#  [4 5 6 7]]

print(a[~np.any(a < 5, axis=1)])
# [[ 8  9 10 11]]

Verwenden Sie numpy.delete() und numpy.where()

Zeilen und Spalten können auch mit np.delete() und np.where() gelöscht werden.

Legen Sie in np.delete() das Ziel ndarray, den zu löschenden Index und die Zielachse fest.

Bei einem zweidimensionalen Array werden Zeilen gelöscht, wenn Achse=0, und Spalten werden gelöscht, wenn Achse=1.

print(a)
# [[ 0  1  2  3]
#  [ 4  5  6  7]
#  [ 8  9 10 11]]

print(np.delete(a, [0, 2], axis=0))
# [[4 5 6 7]]

print(np.delete(a, [0, 2], axis=1))
# [[ 1  3]
#  [ 5  7]
#  [ 9 11]]

Siehe auch den following Artikel für np.delete().

np.where() gibt den Index des Elements zurück, das die Bedingung erfüllt.

Bei mehrdimensionalen Array WIRD Ein Tupel Einer Liste von Indizes (Zeilennummer, Spaltennummer) zurückgegeben, sterben sterben Bedingung für Jede Dimension (Zeile, Spalte) Eine erfüllen.

print(a < 2)
# [[ True  True False False]
#  [False False False False]
#  [False False False False]]

print(np.where(a < 2))
# (array([0, 0]), array([0, 1]))

print(np.where(a < 2)[0])
# [0 0]

print(np.where(a < 2)[1])
# [0 1]

Siehe auch den following Artikel für np.where().

Durch die Kombination dieser beiden Funktionen können SIE die Zeilen und Spalten löschen, die die Bedingung erfüllen.

print(np.delete(a, np.where(a < 2)[0], axis=0))
# [[ 4  5  6  7]
#  [ 8  9 10 11]]

print(np.delete(a, np.where(a < 2)[1], axis=1))
# [[ 2  3]
#  [ 6  7]
#  [10 11]]

print(a == 6)
# [[False False False False]
#  [False False  True False]
#  [False False False False]]

print(np.where(a == 6))
# (array([1]), array([2]))

print(np.delete(a, np.where(a == 6)))
# [ 0  3  4  5  6  7  8  9 10 11]

print(np.delete(a, np.where(a == 6)[0], axis=0))
# [[ 0  1  2  3]
#  [ 8  9 10 11]]

print(np.delete(a, np.where(a == 6)[1], axis=1))
# [[ 0  1  3]
#  [ 4  5  7]
#  [ 8  9 11]]

Wie im Beispiel Beispiel werden die Zeilen und Spalten gelöscht, die mindestens ein Element haben, das sterben Bedingung erfüllt. Dies ist dasselbe wie die Verwendung von np.any().

Mehrere Bedingungen

Wenn Sie mehrere Bedingungen kombinieren möchten, schließen Sie jeden Bedingungsausdruck in () ein und verwenden Sie & oder |.

print(a[(a < 10) & (a % 2 == 1)])
# [1 3 5 7 9]

print(a[np.any((a == 2) | (a == 10), axis=1)])
# [[ 0  1  2  3]
#  [ 8  9 10 11]]

print(a[:, ~np.any((a == 2) | (a == 10), axis=0)])
# [[ 0  1  3]
#  [ 4  5  7]
#  [ 8  9 11]]