Wie kann ich überprüfen, ob ein Numpy-Array leer ist oder nicht?
Ich habe den folgenden Code verwendet, aber dies schlägt fehl, wenn das Array eine Null enthält.
if not self.Definition.all():
Ist das die Lösung?
if self.Definition == array( [] ):
len(array( [] ))
ist 0.len(array( [0] )
ist 1.len(array([[]])
ist auch 1!len()
gibt die Anzahl der Dimensionen in der ersten Achse an. Ein Array kann jedoch auf der ersten Achse eine Dimension ungleich Null haben, aber immer noch leer sein, wenn es auf einer anderen Achse eine Dimension auf Null hat.size
ist besser, da es das Produkt aller Achsen ist.Antworten:
Sie können sich das
.size
Attribut jederzeit ansehen . Es ist als Ganzzahl definiert und ist null (0
), wenn das Array keine Elemente enthält:quelle
http://www.scipy.org/Tentative_NumPy_Tutorial#head-6a1bc005bd80e1b19f812e1e64e0d25d50f99fe2
quelle
Eine Einschränkung. Beachten Sie, dass np.array (None) .size 1 zurückgibt! Dies liegt daran , a.size entspricht np.prod (a.shape), np.array (None) .shape ist (), und ein leeres Produkt ist 1.
Daher verwende ich Folgendes, um zu testen, ob ein Numpy-Array Elemente enthält:
quelle
None
Objekt enthält, ist kein leeres Array. Weitere Informationen finden Sie in den Antworten hierNone
Objekt nicht. Schau dir seine Form an.()
sind skalare Arrays, die ein Element (den Skalar) enthalten. In diesem Beispiel ist der SkalarNone
(None
hat keine besondere Bedeutung, dies ist nur ein Objektarray). Es hängt davon ab, was Sie tun, aber Sie möchten höchstwahrscheinlich skalare Arrays als nicht leer betrachten.Warum sollten wir überprüfen wollen, ob ein Array vorhanden ist
empty
? Arrays wachsen oder schrumpfen nicht wie Listen. Das Beginnen mit einem 'leeren' Array und das Wachsen mitnp.append
ist ein häufiger Anfängerfehler.Verwenden einer Liste in
if alist:
Scharnieren von ihrem Booleschen Wert:Der Versuch, dasselbe mit einem Array zu tun, führt jedoch (in Version 1.18) zu:
und
bool(np.array([1,2])
erzeugt den berüchtigten Mehrdeutigkeitsfehler.quelle