Nullen in NumPy-Array zählen

Vaibhav Vaibhav 30 Januar 2023
  1. Zählen von Nullen in einem NumPy-Array mit count_nonzero()
  2. Nullen in einem NumPy-Array mit where() zählen
Nullen in NumPy-Array zählen

Manchmal müssen wir Elemente innerhalb eines Arrays zählen. Beim Zählen ordnen wir manchmal eine Bedingung zu und zählen die Elemente, die diese Bedingung erfüllen. Es kann eine Bedingung größer als, eine Bedingung kleiner als, eine Bedingung gleich usw. sein.

In diesem Artikel erfahren Sie, wie Sie Nullen in einem NumPy-Array effizient zählen.

NumPy enthält alle Arten von Methoden, die wir auf mehrdimensionale NumPy-Arrays und -Matrizen anwenden können. Es hat auch einige Funktionen, mit denen wir Nullen zählen können.

In diesem Artikel werden zwei solche Methoden erläutert: count_nonzero() und where().

Zählen von Nullen in einem NumPy-Array mit count_nonzero()

Wie der Name schon sagt, zählt diese Methode die Nicht-Null-Elemente. Wir werden diese Funktion verwenden, um Nullen zu zählen.

count_nonzero() gibt einen ganzzahligen Wert oder ein Array von ganzzahligen Werten zurück.

Die Syntax von count_nonzero() ist unten.

count_nonzero(a, axis, keepdims)

Es hat die folgenden Parameter.

  • a - Das Array, in dem die Funktion Nullen zählt
  • axis - Dies ist ein optionaler Parameter und bezieht sich auf die Achse oder das Tupel von Achsen, entlang derer die Nicht-Null-Elemente gezählt werden. Der Standardwert dieses Parameters ist None. Dies bedeutet, dass die Zählung für ein abgeflachtes Array durchgeführt wird.
  • keepdims - Dies ist ein optionaler boolescher Parameter. Standardmäßig ist es False. Bei Einstellung auf True bleiben die gezählten Achsen im Ergebnis als Bemaßungen mit der Größe 1 erhalten.

Zählen wir nun mit dieser Methode Nullen. Informationen zum ersten Weg finden Sie im folgenden Codeausschnitt.

import numpy as np

myArray = np.array([1, 2, 0, 3, 4, 0, 5, 6, 0])
myMatrix = np.array([[0, 0, 1, 1], [0, 1, 0, 1], [1, 0, 1, 0], [1, 1, 0, 0]])
print(myArray)
print(myMatrix)
print(f"Number of Non-Zeroes in Array --> {np.count_nonzero(myArray)}")
print(f"Number of Non-Zeroes in Matrix --> {np.count_nonzero(myMatrix)}")
print(f"Number of Zeroes in Array --> {myArray.size - np.count_nonzero(myArray)}")
print(f"Number of Zeroes in Matrix --> {myMatrix.size - np.count_nonzero(myMatrix)}")

Ausgabe:

[1 2 0 3 4 0 5 6 0]
[[0 0 1 1]
 [0 1 0 1]
 [1 0 1 0]
 [1 1 0 0]]
Number of Non-Zeroes in Array --> 6
Number of Non-Zeroes in Matrix --> 8
Number of Zeroes in Array --> 3
Number of Zeroes in Matrix --> 8

Im obigen Codeausschnitt haben wir lediglich die Anzahl der Nicht-Null-Elemente gezählt und dann die Anzahl der Nicht-Null-Elemente von der Gesamtgröße des Arrays oder der Matrix subtrahiert.

Diese Lösung ist möglicherweise nicht die beste Verwendung dieser Funktion, aber die folgende ist.

import numpy as np

myArray = np.array([1, 2, 0, 3, 4, 0, 5, 6, 0])
myMatrix = np.array([[0, 0, 1, 1], [0, 1, 0, 1], [1, 0, 1, 0], [1, 1, 0, 0]])
print(myArray)
print(myMatrix)
print(myArray == 0)
print(myMatrix == 0)
print(f"Number of Zeroes in Array --> {np.count_nonzero(myArray == 0)}")
print(f"Number of Zeroes in Matrix --> {np.count_nonzero(myMatrix == 0)}")

Ausgabe:

[1 2 0 3 4 0 5 6 0]
[[0 0 1 1]
 [0 1 0 1]
 [1 0 1 0]
 [1 1 0 0]]
[False False  True False False  True False False  True]
[[ True  True False False]
 [ True False  True False]
 [False  True False  True]
 [False False  True  True]]
Number of Zeroes in Array --> 3
Number of Zeroes in Matrix --> 8

Der Kern dieser Lösung ist das Prinzip, dass alles, was in der Informatik False ist, als 0 und True als Wert ungleich Null dargestellt werden kann.

Die Anweisung myArray == 0 gibt ein Array zurück, in dem alle Elemente, die die Eigenschaft erfüllen, True sind und die, die sie nicht erfüllen, False. Und die Bedingung selbst prüft, ob ein Element Null ist oder nicht. Alle Nullelemente werden also zu True und jetzt müssen wir sie zählen. Und dafür verwenden wir die Methode count_nonzero().

Hier ist der Link zur offizielle Dokumentation der Funktion.

Nullen in einem NumPy-Array mit where() zählen

Die Funktion where() filtert die Elemente aus einem Array basierend auf einer bestimmten Bedingung und gibt das gefilterte Array zurück. Es gibt die Indizes der gefilterten Elemente zurück. Mit dieser Funktion erstellen wir ein Array, das nur Nullen enthält, und die Länge dieses neuen Arrays gibt mir die Anzahl der Nullen.

Nun wollen wir die Lösung sehen.

import numpy as np

myArray = np.array([1, 2, 0, 3, 4, 0, 5, 6, 0])
myMatrix = np.array([[0, 0, 1, 1], [0, 1, 0, 1], [1, 0, 1, 0], [1, 1, 0, 0]])
print(myArray)
print(myMatrix)
print(myArray[np.where(myArray == 0)])
print(myMatrix[np.where(myMatrix == 0)])
print(f"Number of Zeroes in Array --> {myArray[np.where(myArray == 0)].size}")
print(f"Number of Zeroes in Matrix --> {myMatrix[np.where(myMatrix == 0)].size}")

Ausgabe:

[1 2 0 3 4 0 5 6 0]
[[0 0 1 1]
 [0 1 0 1]
 [1 0 1 0]
 [1 1 0 0]]
[0 0 0]
[0 0 0 0 0 0 0 0]
Number of Zeroes in Array --> 3
Number of Zeroes in Matrix --> 8

Im obigen Code-Snippet haben wir alle Elemente herausgefiltert, die Null waren. Die Funktion where() hat die Indizes dieser Elemente zurückgegeben. Wir haben diese Indizes weiter verwendet, um die ursprünglichen Elemente zu erhalten. Offensichtlich werden sie alle Null sein. Zuletzt haben wir die Anzahl dieser Nullen gezählt und die Anzahl gedruckt.

Vaibhav Vaibhav avatar Vaibhav Vaibhav avatar

Vaibhav is an artificial intelligence and cloud computing stan. He likes to build end-to-end full-stack web and mobile applications. Besides computer science and technology, he loves playing cricket and badminton, going on bike rides, and doodling.