Operaciones sobre matrices

Pepe Aracil pepe en diselpro.com
Dom Abr 2 00:41:28 CEST 2006


Aqui tienes otra variante de operador ternario en python usando un tupla 
de dos elementos.

m = [[ (1,x)[bool(x)] for x in fila] for fila in matriz]

Saludos.




nocreyente escribió:
> 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
> 
> 
> _______________________________________________
> 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