Je voudrais vérifier si la variable est None ou numpy.array. J'ai implémenté une check_a
fonction pour ce faire.
def check_a(a):
if not a:
print "please initialize a"
a = None
check_a(a)
a = np.array([1,2])
check_a(a)
Mais, ce code déclenche ValueError. Quelle est la manière la plus simple?
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
une des questions les plus courantesnumpy
. Cela signifienot a
produit un tableau booléen, avec (dans ce cas) 2 valeurs. Ce tableau booléen ne peut pas être utilisé commeif
condition! L'is None
alternative est bonne à savoir, mais vous devez également comprendre cette erreur.not
, donc l'erreur se produit en fait lorsque vous essayeznot
de traiter le tableau comme un seul booléen et qu'il découvre que ce n'est pas le cas. Si cela avait été le cas~a
, cela aurait utilisé la surcharge de NumPy et aurait échoué lorsque vousif
essayez d'utiliser le tableau inversé comme un booléen unique.Réponses:
Utiliser
not a
pour tester sia
estNone
suppose que les autres valeurs possibles dea
ont une valeur de vérité deTrue
. Cependant, la plupart des tableaux NumPy n'ont pas du tout de valeur de vérité etnot
ne peuvent pas leur être appliqués.Si vous voulez tester si un objet est
None
, le moyen le plus général et le plus fiable est d'utiliser littéralement uneis
vérification contreNone
:Cela ne dépend pas des objets ayant une valeur de vérité, donc cela fonctionne avec les tableaux NumPy.
Notez que le test doit être
is
, non==
.is
est un test d'identité d'objet.==
est ce que les arguments disent que c'est, et les tableaux NumPy disent que c'est une comparaison d'égalité élément par élément diffusée, produisant un tableau booléen:De l'autre côté des choses, si vous souhaitez tester si un objet est un tableau NumPy, vous pouvez tester son type:
Vous pouvez également utiliser
isinstance
, qui retournera égalementTrue
pour les sous-classes de ce type (si c'est ce que vous voulez). Compte tenu de la gravité et de l'incompatibiliténp.matrix
, vous ne voudrez peut-être pas vraiment ceci:la source
Si vous essayez de faire quelque chose de très similaire:,
a is not None
le même problème se pose. Autrement dit, Numpy se plaint qu'il faut utilisera.any
oua.all
.Une solution de contournement consiste à faire:
Pas trop joli, mais ça fait le boulot.
la source
Vous pouvez voir si l'objet a une forme ou non
la source