Ich möchte überprüfen, ob die Variable None oder numpy.array ist. Ich habe eine check_a
Funktion implementiert , um dies zu tun.
def check_a(a):
if not a:
print "please initialize a"
a = None
check_a(a)
a = np.array([1,2])
check_a(a)
Dieser Code löst jedoch ValueError aus. Was ist der direkte Weg?
ValueError Traceback (most recent call last)
<ipython-input-41-0201c81c185e> in <module>()
6 check_a(a)
7 a = np.array([1,2])
----> 8 check_a(a)
<ipython-input-41-0201c81c185e> in check_a(a)
1 def check_a(a):
----> 2 if not a:
3 print "please initialize a"
4
5 a = None
ValueError: The truth value of an array with more than one element is ambiguous. Use a.any() or a.all()
ValueError
ist eine der häufigstennumpy
Fragen.not a
Dies bedeutet, dass ein boolesches Array mit (in diesem Fall) 2 Werten erstellt wird. Dieses boolesche Array kann nicht alsif
Bedingung verwendet werden! Dieis None
Alternative ist gut zu wissen, aber Sie sollten diesen Fehler auch verstehen.not
, daher tritt der Fehler tatsächlich auf, wennnot
versucht wird, das Array als einen einzelnen Booleschen Wert zu behandeln und herausfindet, dass dies nicht möglich ist. Wenn dies~a
der Fall gewesen wäre, hätte dies die Überladung von NumPy verwendet und wäre fehlgeschlagen, wennif
versucht wurde, das negierte Array als einzelnen Booleschen Wert zu verwenden.Antworten:
Verwenden
not a
, um zu testen, ob angenommena
wirdNone
, dass die anderen möglichen Werte vona
einen Wahrheitswert von habenTrue
. Die meisten NumPy-Arrays haben jedoch überhaupt keinen Wahrheitswert undnot
können nicht auf sie angewendet werden.Wenn Sie testen möchten, ob es sich um ein Objekt handelt
None
, besteht die allgemeinste und zuverlässigste Methode darin, buchstäblich eineis
Prüfung gegen Folgendes durchzuführenNone
:Dies hängt nicht von Objekten mit einem Wahrheitswert ab, daher funktioniert es mit NumPy-Arrays.
Beachten Sie, dass der Test
is
nicht sein muss==
.is
ist ein Objektidentitätstest.==
ist, was auch immer die Argumente sagen, und NumPy-Arrays sagen, dass es sich um einen gesendeten elementweisen Gleichheitsvergleich handelt, der ein boolesches Array erzeugt:Wenn Sie andererseits testen möchten, ob ein Objekt ein NumPy-Array ist, können Sie seinen Typ testen:
Sie können auch verwenden
isinstance
, was auchTrue
für Unterklassen dieses Typs zurückgegeben wird (wenn Sie dies möchten). In Anbetracht dessen, wie schrecklich und inkompatibel esnp.matrix
ist, möchten Sie dies möglicherweise nicht wirklich:quelle
Wenn Sie versuchen, etwas sehr Ähnliches zu tun
a is not None
, tritt das gleiche Problem auf. Das heißt, Numpy beschwert sich, dass mana.any
oder verwenden mussa.all
.Eine Problemumgehung ist zu tun:
Nicht zu hübsch, aber es macht den Job.
quelle
Sie können sehen, ob das Objekt eine Form hat oder nicht
quelle