Me gustaría calcular los valores propios de las matrices de gran tamaño (aproximadamente 1000x1000) usando Python 2.6.5. No he podido hacerlo tan rápido. No he encontrado otros hilos que aborden esta pregunta.Los cálculos de autovalores de Python son mucho más lentos que los de MATLAB en mi computadora. ¿Por qué?
Cuando corro
a = rand(1000,1000);
tic;
for i =1:10
eig(a);
end
toc;
en MATLAB se tarda unos 30 segundos. Una prueba similar en Python requiere 216 segundos. Ejecutarlo a través de R usando RPy no aceleró el cálculo de manera apreciable. Una prueba en Octave tomó 93 segundos. Estoy un poco desconcertado por la diferencia de velocidad.
La única instancia de una pregunta como esta que puedo encontrar en línea es this, que tiene varios años. El póster en esa pregunta tiene una estructura de directorio de Python diferente (que atribuyo a la antigüedad de la publicación, aunque podría estar equivocado), así que no he tenido la suficiente confianza para intentar seguir las instrucciones publicadas por el corresponsal.
Mi gestor de paquetes dice que he instalado LAPACK, y estoy usando NumPy y SciPy para los cálculos de Python:
from numpy import *
from scipy import *
from numpy.linalg import *
import time
a = randn(1000,1000)
tic = time.clock()
for i in range(0,10):
eig(a)
toc = time.clock()
print "Elapsed time is ", toc-tic
soy bastante nuevo en Python, por lo que puede haber hecho algo tonto. Por favor, avíseme si necesito proporcionar más información.
¿Utiliza la misma precisión en Python y Matlab? –
Necesita asegurarse de que su sangría en su código de Python sea exactamente correcta. Tu ejemplo no puede ejecutarse como está escrito. –
Solo para hacerle saber que debe usar 'rand' para ambos (distribución uniforme) o' randn' (distribución normal) pero no para mezclarlos. Esto no explica la diferencia sin embargo. – Wok