Pregunta

¿Hay partes de NumPy y / o SciPy programadas en C / C ++?

¿Y cómo se compara la sobrecarga de llamar a C desde Python con la sobrecarga de llamar a C desde Java y / o C #?

Me pregunto si Python es una mejor opción que Java o C # para aplicaciones científicas.

Si miro los tiroteos , Python pierde por un gran margen. Pero supongo que esto se debe a que no usan bibliotecas de terceros en esos puntos de referencia.

¿Fue útil?

Solución

  1. ¿Cuestionaría cualquier punto de referencia que no muestre el origen de cada implementación (o me perdí algo)? Es completamente posible que una o ambas soluciones estén mal codificadas, lo que resultaría en una evaluación injusta del rendimiento de uno o ambos idiomas. [Editar] ¡Vaya! Ahora veo la fuente. Sin embargo, como otros han señalado, no está utilizando las bibliotecas NumPy / SciPy, por lo que esos puntos de referencia no lo ayudarán a tomar una decisión.
  2. Creo que la gran mayoría de NumPy y SciPy está escrita en C y envuelta en Python para facilitar su uso.
  3. Probablemente depende de lo que esté haciendo en cualquiera de esos idiomas en cuanto a la sobrecarga que hay para una aplicación en particular.

He usado Python para el procesamiento y análisis de datos durante un par de años, por lo que diría que ciertamente es adecuado para su propósito.

¿Qué estás tratando de lograr al final del día? Si desea una forma rápida de desarrollar código legible, Python es una excelente opción y sin duda lo suficientemente rápida para una primera puñalada en lo que sea que esté tratando de resolver.

¿Por qué no tener un golpe en cada uno para un pequeño subconjunto de su problema y comparar los resultados en términos de tiempo de desarrollo y tiempo de ejecución? Luego puede tomar una decisión objetiva basada en algunos datos relevantes ... o al menos eso es lo que haría :-)

Otros consejos

Mucho de esto está escrito en C o fortran. Puede volver a escribir los hot loops en C (o usar una de las miles de formas para acelerar Python, boost / weave es mi favorito), pero ¿realmente importa?

Su aplicación científica se ejecutará una vez. El resto es solo depuración y desarrollo, y estos pueden ser mucho más rápidos en Python.

La mayor parte de NumPy está en C, pero una gran parte del código C es '' repetitivo '' para manejar todos los detalles sucios de la interfaz Python / C. Creo que la relación C frente a Python es de alrededor de 50/50 ATM para NumPy.

No estoy demasiado familiarizado con los detalles de bajo nivel basados ??en vm, pero creo que el costo de la interfaz sería mayor debido a las restricciones impuestas a jvm y .clr. Una de las razones por las que numpy es a menudo más rápido que entornos similares es la representación de la memoria y cómo se comparten / pasan las matrices entre funciones. Mientras que la mayoría de los entornos (Matlab y R también creo) usan Copy-On-Write para pasar matrices entre funciones, NumPy usa referencias. Pero hacerlo en p. la JVM sería difícil (debido a restricciones sobre cómo usar el puntero, etc.). Es factible (existe un puerto inicial de NumPy para Jython), pero no sé cómo resuelven este problema. Tal vez C ++ / Cli lo haría más fácil, pero no tengo experiencia con ese entorno.

Hay una mejor comparación aquí (no es un punto de referencia, pero muestra formas de acelerar Python). NumPy está escrito principalmente en C. La principal ventaja de Python es que hay varias formas de muy extender fácilmente su código con C (ctypes, swig, f2py) / C ++ (boost.python, weave .inline, weave.blitz) / Fortran (f2py), o incluso simplemente agregando anotaciones de tipo a Python para que pueda procesarse a C (cython). No creo que haya muchas cosas comparativamente fáciles para C # o Java, al menos que aparentemente manejan arreglos numéricos que pasan de diferentes tipos (aunque supongo que los defensores argumentarán que, dado que no tienen la penalización de rendimiento de Python, hay menos necesidad a).

Siempre depende de su propia capacidad para manejar la lengua, por lo que el lenguaje puede generar código rápido. Según mi experiencia, numpy es varias veces más lento que las buenas implementaciones de .NET. Y espero que JAVA sea similar rápidamente. Sus compiladores JIT optimizadores han mejorado significativamente a lo largo de los años y producen instrucciones muy eficientes.

numpy, por otro lado, viene con una sintaxis que es más fácil de usar para aquellos que están en sintonía con los lenguajes de secuencias de comandos. Pero si se trata del desarrollo de aplicaciones, esas ventajas a menudo se convierten en obstáculos y anhelará la seguridad de tipografía y los IDE empresariales. Además, la brecha sintáctica ya se está cerrando con C #. Existe un número creciente de bibliotecas científicas para Java y .NET . Personalmente tiendo a C #, porque proporciona una mejor sintaxis para matrices multidimensionales y de alguna manera se siente mejor más moderno'. Pero, por supuesto, esta es solo mi experiencia personal.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top