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