Apprezzerei se qualcuno potesse aiutarmi con questo (e spiegando cosa sta succedendo).Numpy: ho bisogno di una mano per capire cosa succede con l'operatore "in"
Questo funziona:
>>> from numpy import array
>>> a = array((2, 1))
>>> b = array((3, 3))
>>> l = [a, b]
>>> a in l
True
Ma questo non lo fa:
>>> c = array((2, 1))
>>> c in l
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
ValueError: The truth value of an array with more than one element is ambiguous. Use a.any() or a.all()
Il comportamento vorrei replicare è:
>>> x = (2, 1)
>>> y = (3, 3)
>>> l2 = [x, y]
>>> z = (2, 1)
>>> z in l2
True
Nota che quanto sopra funziona anche con mutevoli oggetti:
>>> x = [2, 1]
>>> y = [3, 3]
>>> l2 = [x, y]
>>> z = [2, 1]
>>> z in l2
True
Ovviamente, sapendo che:
>>> (a < b).all()
True
ho provato (e fallito):
>>> (c in l).all()
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
ValueError: The truth value of an array with more than one element is ambiguous. Use a.any() or a.all()
Molto utile, voi (+1) grazie ... Non sto ancora ricevendo il motivo per cui 'a in l' ottiene un risultato diverso da quello' c in l' però. In entrambi i casi il comando dovrebbe testare una matrice numpy in una lista standard ... qual è la differenza che non riesco a vedere? – mac
@mac: Questa è una grande domanda e non conosco la risposta. [I documenti dicono] (http://docs.python.org/reference/expressions.html#notin), "Per i tipi lista e tupla, x in y è vero se e solo se esiste un indice i tale che x == y [i] è vero. ", ma' bool (a == l [0]) 'solleva un'eccezione ValueError e tuttavia 'a in l' restituisce True. Non so come risolvere questa (apparente) contraddizione. – unutbu
E per aggiungere al mistero, 'b in l' solleva un errore ValueError ... – unutbu