Operaciones sobre matrices
nocreyente
nocreyentes en terra.es
Sab Abr 1 13:34:41 CEST 2006
Buenas:
Tienes varias versiones de hacer esto:
Opcion One-liner:
m = [[ x and 1/x or 1 for x in fila] for fila in matriz]
El operador ternario no existe en python. Pero la gente suele hacer
esta ñapa para apañarse. Si x es 0, el and evalua falso y retorna lo
del or.
Opcion funcion:
Es más clara de ver y ya te la han comentado en otros posts:
def inv(x):
if x:
return 1/x
else:
return 1
m = [[ inv(x) for x in fila] for fila in matriz]
Opcion funcion nº2:
Ya que parece que nos importa el rendimiento, queria comentar una
variacion de la anterior.
def inv(x):
try:
return 1/x
except:
return 1
m = [[ inv(x) for x in fila] for fila in matriz]
Con esta variaciacion te quitas de encima unas cuantas comparaciones.
Es legible y eficiente, me gusta.
Si haces alguna prueba de extres comparando las distintas formas, no
dudes a la hora de contarnos los resultados ;-)
Un saludo:
javi
El 31/03/2006, a las 10:31, camontuyu escribió:
> Hola a todos tengo es siguiente problemilla.
>
> Tengo una matriz de numero y quiero hacer la misma operación a cada
> elemento de la matriz. Lo hago de la siguiente forma:
>
> matriz = [ [1.0 / x for x in fila] for fila in matriz ]
>
> El problema está que en la matriz puede haber ceros y claro me da una
> división por cero.
>
> Lo que necesitarà a serà a comprobar que si hay un cero en un
> elemento de
> la matriz guardase un 1.
>
> Me gustarà a conservar el estilo python, si no lo tendré con un
> par de
> bucles :(
>
> Otra cosa, ¿que es mas eficiente hacer esta operación con dos
> bucles o
> creandola mediande listas por comprensión (debido a que tiene que
> crear
> toda la matriz de nuevo)?
>
> Saludos.
>
>
>
> ______________________________________________
> LLama Gratis a cualquier PC del Mundo.
> Llamadas a fijos y móviles desde 1 céntimo por minuto.
> http://es.voice.yahoo.com
> _______________________________________________
> 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