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