Operaciones sobre matrices
Lionel Iturri
lionel en lisistemas.com.ar
Sab Abr 1 21:12:47 CEST 2006
camontuyu wrote:
>El sáb, 01-04-2006 a las 13:34 +0200, nocreyente escribió:
>
>
>
>>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.
>>
>>
>>
>
>Sin duda esta opción, sin menospreciar al resto, es la que creo mejor,
>pues la probabilidad de que un elemento de la matriz sea cero es muy
>baja y por tanto, como dices, se evita hacer un montón de comparaciones.
>
>Muchas gracias a todos.
>
>
>
>______________________________________________
>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
>
>
Al principio me parecio lo mismo, pero despues de pensarlo bien esta la
sobrecarga de llamadas a funciones, velo con tus propios ojos.
import random
from time import time
Matriz= [ [ random.random()*100 for x in xrange(100) ] for x1 in
xrange(100) ]
C1=10
C2=10
def inv1(x):
if x:
return 1/x
else:
return 1
def F1():
for t in xrange(C1):
m = [[ inv1(x) for x in fila] for fila in Matriz]
def inv2(x):
try:
return 1/x
except:
return 1
def F2():
for t in xrange(C1):
m = [ [ inv2(x) for x in fila ] for fila in Matriz]
def F3():
for t in xrange(C1):
m = [ [ x and x or 1 for x in fila ] for fila in Matriz]
for Func in (F1, F2, F3):
Ts=[]
for C in xrange(C2):
T=time()
Func()
Ts.append( time() - T )
print "%s: %.4f" % (Func.__name__, reduce(lambda x, y: x+y, Ts) /
len(Ts))
Más información sobre la lista de distribución Python-es