eficiencia de numpy.array
Francesc Altet
faltet en carabos.com
Jue Mar 8 19:25:36 CET 2007
El dj 08 de 03 del 2007 a les 18:23 +0100, en/na Pepe Aracil va
escriure:
> >> (con 'a>100' se obtiene un array de booleanos)
>
> Y esto como se implementa en python ???
> ¿Sobreescribiendo el método __cmp__ del objeto array?
No. El __cmp__ no sirve porque en una comparación (a.__cmp__(b)), éste
sólo devuelve un número (negativo si a < b, cero si 'a == b' o positivo
si 'a > b').
Lo que se usa para sobrecargar en este caso son la comparaciones
'enriquecidas' (rich comparisons), como el __le__, __eq__, __gt__, etc.
Éstos operadores, al revés que __cmp__, sí que pueden devolver objetos
generales. Se introdujeron en Python 2.1, seguramente debido a las
necesidades de la comunidad calculista (alrededor de Numeric, por aquel
entonces).
Además de los operadores de comparaciones enriquecidas, NumPy también
soporta los operadores __and__ y __or__, de manera que se puede hacer:
a[(a > 10) & (a < 100)]
que selecciona los valores comprendidos entre 10 y 100.
Por desgracia, y como habrás observado, __and__ se mapea al operador
bit-a-bit '&' y __or__ al '|' (también bit-a-bit), mientras que los
operadores lógicos ('and' y 'or') no se pueden sobrecargar actualmente.
Así que esto nos impide hacer cosas como:
a[a > 10 and a < 100]
que seria mucho más lógico.
Existen intentos de añadir la posibilidad de sobrecargar los operadores
lógicos, pero la cosa no es sencilla, como se puede ver en el PEP 335, y
en este thread:
http://mail.python.org/pipermail/python-dev/2004-September/048763.html
Saludos,
--
Francesc Altet | Be careful about using the following code --
Carabos Coop. V. | I've only proven that it works,
www.carabos.com | I haven't tested it. -- Donald Knuth
------------ próxima parte ------------
_______________________________________________
Python-es mailing list
Python-es en aditel.org
http://listas.aditel.org/listinfo/python-es
Más información sobre la lista de distribución Python-es