Le agradecería si alguien me podría ayudar con esto (y explicar lo que está pasando).Numpy: necesita una mano en la comprensión de lo que sucede con el "en" operador
Esto funciona:
>>> from numpy import array
>>> a = array((2, 1))
>>> b = array((3, 3))
>>> l = [a, b]
>>> a in l
True
Pero esto no es así:
>>> 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()
El comportamiento quisiera replicar es:
>>> x = (2, 1)
>>> y = (3, 3)
>>> l2 = [x, y]
>>> z = (2, 1)
>>> z in l2
True
Tenga en cuenta que lo anterior también funciona con mutable objetos:
>>> x = [2, 1]
>>> y = [3, 3]
>>> l2 = [x, y]
>>> z = [2, 1]
>>> z in l2
True
Por supuesto, sabiendo que:
>>> (a < b).all()
True
Probé (y fracasado):
>>> (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()
Muy útil, gracias (+1) ... Todavía no entiendo por qué 'a in l' obtiene un resultado diferente al de' c in l' embargo. En ambos casos, el comando debería probar una matriz numpy en una lista estándar ... ¿cuál es la diferencia que no puedo ver? – mac
@mac: Esa es una gran pregunta, y no sé la respuesta. [Los documentos dicen] (http://docs.python.org/reference/expressions.html#notin), "Para los tipos de lista y tupla, x en y es verdadero si y solo si existe un índice i tal que x == y [i] es verdadero. ", pero' bool (a == l [0]) 'genera un ValueError y aún' a in l' devuelve True. No sé cómo resolver esta (aparente) contradicción. – unutbu
Y para añadir al misterio, 'b en l' plantea una ValueError ... – unutbu