Wie zähle ich das Vorkommen eines bestimmten Elements in einem ndarray?

Lesezeit: 4 Minuten

Benutzer-Avatar
mfloww

Wie zähle ich die Anzahl der 0s und 1s im folgenden Array?

y = np.array([0, 0, 0, 1, 0, 1, 1, 0, 0, 0, 0, 1])

y.count(0) gibt:

numpy.ndarray Objekt hat kein Attribut count

  • In diesem Fall ist es auch möglich, einfach zu verwenden numpy.count_nonzero.

    – Mong H.Ng

    31. März 2019 um 17:50 Uhr

Benutzer-Avatar
Aziz Alto

Was ist mit der Verwendung numpy.count_nonzeroetwas wie

>>> import numpy as np
>>> y = np.array([1, 2, 2, 2, 2, 0, 2, 3, 3, 3, 0, 0, 2, 2, 0])

>>> np.count_nonzero(y == 1)
1
>>> np.count_nonzero(y == 2)
7
>>> np.count_nonzero(y == 3)
3

  • Diese Antwort scheint besser zu sein als die mit den meisten Upvotes.

    – Alex

    31. Dezember 2017 um 17:16 Uhr

  • Ich glaube nicht, dass das funktionieren würde numpy.ndarray wie OP ursprünglich gefragt hat.

    – LYu

    28. Juli 2018 um 20:55 Uhr

  • @LYu – das y ist in dieser Antwort ein np.ndarray. Außerdem – die meisten, wenn nicht alle np.something-Funktionen funktionieren problemlos auf ndarrays.

    – Magnuski

    29. Juli 2018 um 19:34 Uhr

  • Es ist definitiv am einfachsten zu lesen. Die Frage ist, was am schnellsten und am platzsparendsten ist

    – Nathan

    30. Mai 2018 um 19:02 Uhr

  • Möglicherweise weniger platzsparend als numpy.count_nonzero(y==0), da es den Vektor auswertet (y==0)

    – Sridhar Thiagarajan

    27. Oktober 2018 um 22:21 Uhr


  • Ich mag das, weil es ähnlich wie Matlab/Octave ist sum( vector==value )

    – ePi272314

    17. August 2019 um 17:01 Uhr

  • Dies funktioniert auch für andere Werte im Array – nicht nur 0 und 1; es müssen nicht einmal Zahlen sein. (y == "A") gibt ein Array von zurück bool Werte. Da boolesche Werte in Python gleich 0 und 1 sind, können sie summiert werden: (y == "A").sum() wird die Anzahl von zurückgeben As im Array y.

    – natka_m

    17. Dezember 2020 um 15:00 Uhr


Für Ihren Fall könnten Sie auch nachsehen numpy.bincount

In [56]: a = np.array([0, 0, 0, 1, 0, 1, 1, 0, 0, 0, 0, 1])

In [57]: np.bincount(a)
Out[57]: array([8, 4])  #count of zeros is at index 0 : 8
                        #count of ones is at index 1 : 4

  • Dieser Code ist möglicherweise eine der schnellsten Lösungen für größere Arrays, die ich ausprobiert habe. Das Ergebnis als Liste zu erhalten, ist ebenfalls ein Bonus. Danke!

    – Youngsup Kim

    24. Oktober 2018 um 22:56 Uhr

  • Und wenn ‘a’ ein n-dimensionales Array ist, können wir einfach verwenden: np.bincount(np.reshape(a, a.size))

    – Ari

    15. Januar 2020 um 9:01 Uhr

  • Beachten Sie: (1) Dies rundet Nicht-Ganzzahlen ab. z.B np.bincount([0, 0.5, 1.1]) == array([2, 1]) (2) Wenn Sie ein Array mit großen Ganzzahlen haben, erhalten Sie eine lange Ausgabe, z len(np.bincount([1000])) == 1001.

    – Eistel

    2. Juli 2021 um 9:29 Uhr

  • Es ist auch hilfreich, wenn wir Null für Werte zwischen den maximalen und den minimalen Werten anzeigen müssen, z. B. wenn a = np.array([0, 0, 0, 2, 0, 2, 2, 0, 0, 0, 0, 2]) es wird bekommen [8 0 4]. So für 1 es legte 0 im Ergebnis.

    – Ali_Sch

    6. Februar um 2:42

y = np.array([0, 0, 0, 1, 0, 1, 1, 0, 0, 0, 0, 1])

Wenn du weißt, dass sie gerecht sind 0 und 1:

np.sum(y)

gibt Ihnen die Anzahl der Einsen. np.sum(1-y) gibt die Nullen.

Für eine leichte Allgemeingültigkeit, wenn Sie zählen wollen 0 und nicht null (aber möglicherweise 2 oder 3):

np.count_nonzero(y)

gibt die Anzahl der Nichtnull an.

Aber wenn Sie etwas Komplizierteres brauchen, glaube ich nicht, dass numpy ein nettes bieten wird count Möglichkeit. Gehen Sie in diesem Fall zu Sammlungen:

import collections
collections.Counter(y)
> Counter({0: 8, 1: 4})

Dies verhält sich wie ein Diktat

collections.Counter(y)[0]
> 8

  • Dieser Code ist möglicherweise eine der schnellsten Lösungen für größere Arrays, die ich ausprobiert habe. Das Ergebnis als Liste zu erhalten, ist ebenfalls ein Bonus. Danke!

    – Youngsup Kim

    24. Oktober 2018 um 22:56 Uhr

  • Und wenn ‘a’ ein n-dimensionales Array ist, können wir einfach verwenden: np.bincount(np.reshape(a, a.size))

    – Ari

    15. Januar 2020 um 9:01 Uhr

  • Beachten Sie: (1) Dies rundet Nicht-Ganzzahlen ab. z.B np.bincount([0, 0.5, 1.1]) == array([2, 1]) (2) Wenn Sie ein Array mit großen Ganzzahlen haben, erhalten Sie eine lange Ausgabe, z len(np.bincount([1000])) == 1001.

    – Eistel

    2. Juli 2021 um 9:29 Uhr

  • Es ist auch hilfreich, wenn wir Null für Werte zwischen den maximalen und den minimalen Werten anzeigen müssen, z. B. wenn a = np.array([0, 0, 0, 2, 0, 2, 2, 0, 0, 0, 0, 2]) es wird bekommen [8 0 4]. So für 1 es legte 0 im Ergebnis.

    – Ali_Sch

    6. Februar um 2:42

Konvertieren Sie Ihr Array y auflisten l und dann tun l.count(1) und l.count(0)

>>> y = numpy.array([0, 0, 0, 1, 0, 1, 1, 0, 0, 0, 0, 1])
>>> l = list(y)
>>> l.count(1)
4
>>> l.count(0)
8 

1018050cookie-checkWie zähle ich das Vorkommen eines bestimmten Elements in einem ndarray?

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy