Wie kann man das Auftreten bestimmter Elemente in einem Ndarray zählen?

Lesezeit: 3 Minuten

Benutzer-Avatar
mfloww

In Python habe ich ein ndarray y
das ist gedruckt als array([0, 0, 0, 1, 0, 1, 1, 0, 0, 0, 0, 1])

Ich versuche zu zählen, wie viele 0s und wie viele 1s gibt es in diesem Array.

Aber wenn ich tippe y.count(0) oder y.count(1)es sagt

numpy.ndarray Objekt hat kein Attribut count

Was sollte ich tun?

  • 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
Özgür Vatansever

a = numpy.array([0, 3, 0, 1, 0, 1, 2, 1, 0, 0, 0, 0, 1, 3, 4])
unique, counts = numpy.unique(a, return_counts=True)
dict(zip(unique, counts))

# {0: 7, 1: 4, 2: 1, 3: 2, 4: 1}

Non-numpy Weg:

Benutzen collections.Counter;

import collections, numpy
a = numpy.array([0, 3, 0, 1, 0, 1, 2, 1, 0, 0, 0, 0, 1, 3, 4])
collections.Counter(a)

# Counter({0: 7, 1: 4, 3: 2, 2: 1, 4: 1})

  • Das wäre “` unique, counts = numpy.unique(a, return_counts=True) dict(zip(unique, counts)) “`

    – Schreddern

    16. März 2016 um 13:14 Uhr

  • Wenn Sie das Wörterbuch wollen, dict(zip(*numpy.unique(a, return_counts=True)))

    – Seppo Enarvi

    28. April 2016 um 13:19 Uhr

  • Was ist, wenn ich auf die Anzahl der Vorkommen jedes eindeutigen Elements des Arrays zugreifen möchte, ohne der Variablen zuzuweisen – counts. Irgendwelche Hinweise dazu?

    – sajis997

    24. Dezember 2016 um 23:08 Uhr

  • das ist ein hack. Numpy hat dafür Funktionen namens bincount() oder histogram()

    – John Ktejik

    22. Oktober 2018 um 3:01 Uhr

  • Versucht, beide Methoden für ein sehr großes Array (~ 30 GB) zu verwenden. Die Numpy-Methode hatte keinen Speicher mehr, während die collections.Counter hat prima funktioniert

    – Ivan Novikov

    26. November 2019 um 13:10 Uhr

Ich persönlich würde zu:
(y == 0).sum() und (y == 1).sum()

Z.B

import numpy as np
y = np.array([0, 0, 0, 1, 0, 1, 1, 0, 0, 0, 0, 1])
num_zeros = (y == 0).sum()
num_ones = (y == 1).sum()

  • 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

Benutzer-Avatar
Ibrahim Berber

Filtern und verwenden len

Verwenden len könnte eine weitere Option sein.

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

Angenommen, wir möchten die Anzahl der Vorkommen von 0.

A[A==0]  # Return the array where item is 0, array([0, 0, 0])

Wickeln Sie es jetzt mit ein len.

len(A[A==0])  # 3
len(A[A==1])  # 4
len(A[A==7])  # 0, because there isn't such item.

Benutzer-Avatar
Akavall

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

1006320cookie-checkWie kann man das Auftreten bestimmter Elemente in einem Ndarray zählen?

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

Privacy policy