Autor
|
Tema: [Python] - Matrices. (Leído 17,798 veces)
|
Novlucker
Ninja y
Colaborador
Desconectado
Mensajes: 10.683
Yo que tu lo pienso dos veces
|
De hecho no, es que en mi caso no uso append para generar la lista, sino que la genero dinamicamnte con un for. El primer for genera una lista de n elementos, y el for de afuera crea n listas (matriz n x n). La diagonal la defino con esa única comparación i==e Saludos
|
|
|
En línea
|
Contribuye con la limpieza del foro, reporta los "casos perdidos" a un MOD XD "Hay dos cosas infinitas: el Universo y la estupidez humana. Y de la primera no estoy muy seguro." Albert Einstein
|
|
|
Meta
|
Que interés, que fuerza, que motivación, que ilusión, que grandeza, qué ánimos, qué energía... veo mucha profesionalidad aquí dentro.
¿Se puede hacer sencillo de entender?
|
|
|
En línea
|
|
|
|
Karcrack
Desconectado
Mensajes: 2.416
Se siente observado ¬¬'
|
De hecho no, es que en mi caso no uso append para generar la lista, sino que la genero dinamicamnte con un for. El primer for genera una lista de n elementos, y el for de afuera crea n listas (matriz n x n). La diagonal la defino con esa única comparación i==e Saludos Entonces si que se hacen dos for, no?
|
|
|
En línea
|
|
|
|
Novlucker
Ninja y
Colaborador
Desconectado
Mensajes: 10.683
Yo que tu lo pienso dos veces
|
Ya ya, pero a lo que voy es que no son más vueltas y lo de la diagonal es la comparación [Edito]:Ahora si por si acaso, medido el tiempo con timeit para n = 10 y 1000 repeticiones de la función (obviamente he quitado el input) Karcrack = 23.4203746812 Novlucker = 6.43258395027 Saludos
|
|
« Última modificación: 16 Noviembre 2010, 17:54 pm por Novlucker »
|
En línea
|
Contribuye con la limpieza del foro, reporta los "casos perdidos" a un MOD XD "Hay dos cosas infinitas: el Universo y la estupidez humana. Y de la primera no estoy muy seguro." Albert Einstein
|
|
|
Karcrack
Desconectado
Mensajes: 2.416
Se siente observado ¬¬'
|
Novlucker, podrais postear exactamente el codigo que has utilizado para medir el tiempo con timeit? asi puedo mejorar mis marcas
|
|
|
En línea
|
|
|
|
Novlucker
Ninja y
Colaborador
Desconectado
Mensajes: 10.683
Yo que tu lo pienso dos veces
|
Este ... import timeit def test(): n = 10 M = [] for i in range(n): a = [0] * n a[i] = 1 print a M.append(a) if __name__=='__main__': from timeit import Timer t = Timer("test()", "from __main__ import test") print t.timeit(1000)
... pero, le he quitado los comentarios y ha bajado 8 segundos? Igual ahora lo repetí 4 veces y da 16/17. Ahí lo único que haces es cambiar lo que está en la función test, que para el caso de mi código no es más que poner las líneas de la creación de la lista M y el print Saludos
|
|
|
En línea
|
Contribuye con la limpieza del foro, reporta los "casos perdidos" a un MOD XD "Hay dos cosas infinitas: el Universo y la estupidez humana. Y de la primera no estoy muy seguro." Albert Einstein
|
|
|
Karcrack
Desconectado
Mensajes: 2.416
Se siente observado ¬¬'
|
Pues te gano yo quitando los prints import timeit def test1(): n = 10 M = [[int(i==e) for i in range(n)] for e in range(n)] def test2(): n = 10 M = [] for i in range(n): a = [0] * n a[i] = 1 M.append(a) if __name__=='__main__': from timeit import Timer t = Timer("test1()", "from __main__ import test1") print t.timeit(10000), "->Novlucker" t = Timer("test2()", "from __main__ import test2") print t.timeit(10000), "->Karcrack"
Tienes que tener en cuenta que yo llamo a print() n veces, y tu solo una... Lo he ejecutado 10 veces y mira los resultados: 1.05840686456 ->Novlucker 0.208165562942 ->Karcrack 1.00837229313 ->Novlucker 0.21114219824 ->Karcrack 0.989414576434 ->Novlucker 0.205958299169 ->Karcrack 0.987928354023 ->Novlucker 0.208567848707 ->Karcrack 0.993568176961 ->Novlucker 0.210146820336 ->Karcrack 0.980355603855 ->Novlucker 0.204104990997 ->Karcrack 0.984192963072 ->Novlucker 0.205497626095 ->Karcrack 0.981901331035 ->Novlucker 0.203624203635 ->Karcrack 0.982219807266 ->Novlucker 0.2067748834 ->Karcrack 0.98221617552 ->Novlucker 0.283576264581 ->Karcrack Mi codigo es aproximadamente 5 veces mas rapido MOD: He hecho una version ligeramente mas rapida n = 10 M = [[0]*n for i in range(n)] while n: n-=1 M[n][n] = 1
|
|
« Última modificación: 16 Noviembre 2010, 19:53 pm por Karcrack »
|
En línea
|
|
|
|
Novlucker
Ninja y
Colaborador
Desconectado
Mensajes: 10.683
Yo que tu lo pienso dos veces
|
Pues si Supongo que pesa la comparación que hago para determinar la diagonal, y que tu clonas la lista y yo la genero Es decir, tu creas la lista con valores por defecto y la modificas, yo hago las verificaciones antes de crearla, pero obviamente termina siendo más ligero Saludos
|
|
|
En línea
|
Contribuye con la limpieza del foro, reporta los "casos perdidos" a un MOD XD "Hay dos cosas infinitas: el Universo y la estupidez humana. Y de la primera no estoy muy seguro." Albert Einstein
|
|
|
|
Mensajes similares |
|
Asunto |
Iniciado por |
Respuestas |
Vistas |
Último mensaje |
|
|
Filas de Matrices en Python
Scripting
|
AgnesBlack
|
0
|
2,708
|
16 Octubre 2011, 01:51 am
por AgnesBlack
|
|
|
{Python 3.4} Problema con programa matrices
Scripting
|
dj28
|
2
|
3,641
|
7 Julio 2014, 00:21 am
por Almapa
|
|
|
Ayuda: Multiplicación de matrices - Python
Ejercicios
|
Itzhack
|
1
|
12,402
|
4 Noviembre 2014, 01:29 am
por Minusfour_cierralo_o_baneamefull
|
|
|
Python -- Creación de Matrices
Programación General
|
scyssor91
|
0
|
1,981
|
13 Abril 2016, 20:17 pm
por scyssor91
|
|
|
matrices en python
Scripting
|
py.cba
|
1
|
2,310
|
24 Noviembre 2016, 04:22 am
por Once
|
|