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