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