que programacion mejor lenguaje convertir codigo python matlab matrix performance

programacion - ¿Es MATLAB más rápido que Python?



matlab lenguaje de programacion (8)

Es posible que encuentre algunos resultados útiles en la parte inferior de este enlace

http://wiki.scipy.org/PerformancePython

De la introducción,

Una comparación de tejido con NumPy, Pyrex, Psyco, Fortran (77 y 90) y C ++ para resolver la ecuación de Laplace.

También compara MATLAB y parece mostrar velocidades similares a cuando se usa Python y NumPy .

Por supuesto, esto es solo un ejemplo específico, su aplicación podría permitir un mejor o peor rendimiento. No hay daño en ejecutar la misma prueba en ambos y comparando.

También puede compilar NumPy con bibliotecas optimizadas como ATLAS que proporciona algunas rutinas BLAS / LAPACK . Estos deberían ser de velocidad comparable a MATLAB.

No estoy seguro si las descargas de NumPy ya están compiladas, pero creo que ATLAS sintonizará las bibliotecas en su sistema si compila NumPy.

http://www.scipy.org/Installing_SciPy/Windows

El enlace contiene más detalles sobre lo que se requiere en la plataforma de Windows.

EDITAR:

Si quiere saber qué tiene un mejor rendimiento, C o C ++, podría valer la pena hacer una nueva pregunta. Aunque desde el enlace de arriba, C ++ tiene el mejor rendimiento. Otras soluciones son bastante cercanas también, es decir, Pyrex, Python / Fortran (usando f2py) y C ++ en línea.

El único álgebra matricial en C ++ que he hecho alguna vez fue usar MTL e implementar un filtro de Kalman ampliado. Supongo que, en esencia, depende de las bibliotecas que está utilizando LAPACK / BLAS y qué tan bien optimizado es.

Este enlace tiene una lista de paquetes numéricos orientados a objetos para muchos idiomas.

http://www.oonumerics.org/oon/

Quiero calcular los campos magnéticos de algunos conductores usando la ley Biot-Savart y quiero usar una matriz de 1000x1000x1000. Antes de usar MATLAB, pero ahora quiero usar Python. ¿Python es más lento que MATLAB? ¿Cómo puedo hacer Python más rápido?

EDITAR: Tal vez la mejor manera es calcular la gran matriz con C / C ++ y luego transferirlos a Python. Quiero visualizar luego con VPython .

EDIT2: ¿Cuál es mejor en mi caso: C o C ++?


La única prueba válida es compararla. Realmente depende de cuál sea su plataforma y de cuán bien se relaciona la Ley Biot-Savart con las operaciones integradas de Matlab o NumPy / SciPy.

En cuanto a hacer Python más rápido, Google está trabajando en Unladen Swallow, un compilador JIT para Python. Probablemente haya otros proyectos como este también.


No pude encontrar muchos números difíciles para responder esta misma pregunta, así que seguí adelante y realicé las pruebas yo mismo. Los resultados, las secuencias de comandos y los conjuntos de datos utilizados están disponibles aquí en mi publicación en MATLAB frente a la velocidad de Python para el análisis de vibraciones .

Para resumir, la función FFT en MATLAB es mejor que la de Python, pero puedes hacer una manipulación simple para obtener resultados y velocidad comparables. También descubrí que la importación de datos era más rápida en Python en comparación con MATLAB (incluso para archivos MAT utilizando scipy.io).


Según su edición 2, recomiendo encarecidamente que use Fortran porque puede aprovechar las subrutinas de álgebra lineal disponibles (Lapack y Blas) y es mucho más simple que C / C ++ para los cálculos de la matriz.

Si prefiere usar un enfoque C / C ++, usaría C, porque presumiblemente necesita un rendimiento sin procesar en una interfaz presumiblemente simple (los cálculos de la matriz tienden a tener interfaces simples y algoritmos complejos).

Sin embargo, si decides ir con C ++, puedes usar el TNT (el Tool Numerical Toolkit, la implementación en C ++ de Lapack).

Buena suerte.


Si solo está usando Python (con NumPy), puede ser más lento, dependiendo de qué piezas use, tenga o no bibliotecas de álgebra lineal optimizadas instaladas, y qué tan bien sepa cómo aprovechar NumPy.

Para hacerlo más rápido, hay algunas cosas que puedes hacer. Hay una herramienta llamada Cython que te permite agregar declaraciones de tipo al código de Python y traducirlo a un módulo de extensión de Python en C. ¿Cuánto te beneficia esto depende un poco de qué tan diligente eres con tus declaraciones de tipo? Si no lo haces ". Si agrega alguno, no verá mucho beneficio. Cython también tiene soporte para tipos NumPy, aunque estos son un poco más complicados que otros tipos.

Si tiene una buena tarjeta gráfica y está dispuesto a aprender un poco sobre computación GPU, PyCUDA también puede ayudar. (Si no tiene una tarjeta gráfica nvidia, también escucho que hay un PyOpenCL en proceso). No conozco el dominio de su problema, pero si se lo puede ubicar en un problema CUDA, debería poder manejar bien sus elementos 10 ^ 9.


También me gustaría señalar que Python (+ NumPy) puede interactuar fácilmente con Fortran a través del módulo F2Py, que básicamente te transfiere las velocidades nativas de Fortran en los trozos de código que descargas en él.



NumPy y MATLAB usan una implementación BLAS subyacente para operaciones de álgebra lineal estándar. Durante algún tiempo, ambos utilizaron ATLAS , pero hoy en día MATLAB aparentemente también viene con otras implementaciones como la Biblioteca de Kernel de Matriz de Intel (MKL). Cuál es más rápido según cuánto dependa del sistema y cómo se compiló la implementación de BLAS. También puede compilar NumPy con MKL y Enthought está trabajando en el soporte de MKL para su distribución de Python (consulte su roadmap ). Aquí también hay una reciente publicación de blog interesante sobre esto.

Por otro lado, si necesita operaciones más especializadas o estructuras de datos, tanto Python como MATLAB le ofrecen varias formas de optimización (como Cython , PyCUDA , ...).

Editar: Corregí esta respuesta para tener en cuenta las diferentes implementaciones de BLAS. Espero que ahora sea una representación justa de la situación actual.