2011-01-21 28 views
19

Estoy tratando de escribir un proyecto matemático bastante pesado, que analizará aproximadamente 100MB + de datos varias veces al día, entonces, necesito un lenguaje rápido que sea bastante fácil de usar. Me habría ido con C, pero hacer un gran proyecto en C es muy difícil, especialmente cuando la programación de bajo nivel se interpone en tu camino. Entonces, yo era sobre python o java. Ambos están bien equipados con las características de OO, así que no me importa eso. Ahora, aquí están mis pros para la elección de pitón:Java o Python para matemática?

  • Muy fácil de usar lenguaje
  • Tiene una muy gran biblioteca de cosas útiles
  • Tiene un fácil utilizar el trazado de la biblioteca

Aquí están los contras:

  • no exactamente ardiente
  • no hay una biblioteca nativa de la red neuronal python que está activa
  • No puedo cerrar mi código fuente sin pasar por un problema
  • Implementar el código python en las computadoras de los clientes es difícil de manejar, especialmente cuando los clientes son idiotas.

Éstos son los pros para la elección de Java:

  • biblioteca enorme
  • bien apoyado
  • Fácil de implementar
  • bastante rápido, posiblemente ni siquiera comparable a C++
  • El Encog Neural La biblioteca de red es realmente activa y bastante impresionante
  • El soporte de red es LLY buena
  • tipificación estricta

Éstos son los contras para Java:

  • no puedo encontrar una buena biblioteca de gráficos como matplotlib para el pitón
  • Sin soporte incorporado para grandes números enteros, eso significa otra dependencia (quiero decir REALMENTE enteros grandes, no solo el tamaño de math.BigInteger)
  • El archivo IO es un poco incómodo en comparación con Python
  • No muchísimo Puede manipular o "hacer que la programación sea fácil" características que tiene Python.

Por lo tanto, esperaba que ustedes me pueden decir qué usar. Estoy igualmente familiarizado con ambos idiomas. Además, las sugerencias para otros idiomas también son excelentes.

EDITAR: ¡GUAU! Ustedes son rápidos! 30 minutos a 10 respuestas!

+3

¿Qué quiere decir con "REALMENTE enteros grandes"? java.math.BigInteger crecerá al tamaño necesario para almacenar los números con los que está tratando (al precio de una sintaxis un tanto incómoda aunque Java no tiene sobrecarga de operador) –

+2

¿Ha considerado usar una computadora "real"? sistema de álgebra] (http://en.wikipedia.org/wiki/Comparison_of_computer_algebra_systems)? No tiene que ser Mathematica (¡es caro!), hay muchas opciones más baratas o incluso gratuitas. –

+0

Solo me preguntaba "Me refiero a REALMENTE enteros grandes, no solo al tamaño de math.BigInteger". ¿Por qué crees que los números de java.math.BigInteger no lo harán? Me parece que antes de comenzar a alcanzar sus límites, ya tendrá problemas con la memoria. –

Respuesta

4

NumPy por lo general ponen un poco de patada en la fuerza computacional de Python. Es el estándar de facto para cualquier cálculo real de números en Python. No tengo ninguna experiencia real con Java en este campo, así que no estoy realmente calificado para responder esta pregunta por ti.

0

¿Qué es más importante para usted?

Si se trata de un rápido desarrollo de aplicaciones, encontré que Python era mucho más fácil de codificar que Java, y recién estaba aprendiendo Python, mientras que yo llevaba años codificando Java.

Si es la velocidad de la aplicación y la capacidad de reutilizar el código existente, entonces probablemente debería quedarse con Java. Es razonablemente rápido y muchos esfuerzos de investigación actualmente usan Java como su idioma de elección.

18

Java generalmente será más rápido de ejecutar (no lo tome como una verdad absoluta), pero más lento para escribir.

Python es lo opuesto. Dado que ya existen bibliotecas como SciPy y NumPy, que se basan en el código C rápido, le sugiero ir con Python si prefiere ir por el camino "más rápido" en términos de escritura de código. A menos que falten bloques fundamentales para su aplicación en SciPy + NumPy, y que existan para Java.

+0

NumPy parece una gran idea, lo investigaré. –

+0

Para aquellas funciones que no están incorporadas en SciPy y NumPy, puede usar weave (parte de SciPy) o Cython para acelerarlas. –

+0

NumPy y SciPy se están convirtiendo rápidamente en estándares en los ámbitos de la informática científica/matemática. Definitivamente habilidades que vale la pena tener. –

1

Si esas son las opciones, entonces Java debería ser el más rápido para el trabajo intensivo de matemáticas. Está compilado (aunque sí, todavía está ejecutando código de bytes).

Exelian menciones NumPy. También está el paquete SciPy. Ambos vale la pena mirar pero solo parecen dar mejoras de velocidad para trabajar con muchas matrices y procesamiento de vectores. Cuando traté de usarlos con NLTK para una rutina intensiva en matemática, descubrí que no había mucha aceleración.

Para el trabajo intensivo de matemática en estos días, estaría usando C/C++ o C# (personalmente prefiero C# sobre Java aunque eso no debería afectar su decisión). Mi primer empleador fuera de la universidad me pagó para usar Fortran para cosas que casi con seguridad son más intensivas en matemáticas que cualquier cosa en la que estés pensando. No se ría: los compiladores de Fortran son algunos de los mejores para el procesamiento matemático de hierro pesado.

+1

¿Por qué alguien se reiría de Fortran? Sigue siendo la lengua franca para la informática científica seria. Las bibliotecas de álgebra lineal NIST son inmejorables. – duffymo

+1

Bastante, la combinación de compiladores y bibliotecas es probablemente lo mejor que se puede obtener para el hierro pesado, sin embargo, la mayoría de los desarrolladores (incluso los más antiguos) no parecen estar conscientes de eso, y rápidamente lo descartan como algo del antiguo pasado e irrelevante en el mundo moderno. – winwaed

11

Por qué no conseguir lo mejor de ambos mundos mediante el aprovechamiento de múltiples idiomas en la JVM:

  • escribir las partes intensivas de rendimiento en Java (o utilizar bibliotecas de Java grandes existentes)
  • Uso Jython a escribir la interfaz de usuario/aplicación en Python y llaman al código Java cuando sea necesario
+0

Solo un juego con Jython. Es genial y simple llamar a las clases de Java desde Jython, pero un verdadero PITA para ir por el otro camino. –

+1

Jython superaría el punto de usar Java, ya que es principalmente debido a la mejora de velocidad. –

+0

En mi humilde opinión, esta es la respuesta definitiva, no buscaría más. – MattiaG

4

Implementación de código Python en los ordenadores clientes es difícil de tratar, especialmente cuando los clientes son idiotas Creo que esto también es un problema con Java.

no puedo encontrar una buena biblioteca de gráficos como matplotlib para el pitón Ha intentado jfreechart http://www.jfree.org/jfreechart/

Además, sugerencias para otros idiomas también es grande Yo sugeriría maravilloso, se ve un poco como Python y es un lenguaje JVM que se integra bien con Java.

No lo ha preguntado directamente, pero le recomendaré la biblioteca Apache Commons Math para los cálculos Math Java.

+0

Parece una buena idea, exactamente lo que necesitaba ... –

+0

¿Cómo se ve Groovy un poco como Python. Sí, está tipeado dinámicamente y admite listas, pero de lo contrario su sintaxis (para mí) se ve> 90% como Java. –

+0

Todos tienen derecho a una opinión. – Navi

0

Parece Java puede ser realmente rápida: http://blog.dhananjaynene.com/2008/07/performance-comparison-c-java-python-ruby-jython-jruby-groovy/
Por otro lado Python es muy bueno para hacer matemáticas, y no hay mucho espacio para mejorar el rendimiento si se utiliza correctamente (quiero decir, con el right idioms/modules/builtin functions).

Editar: Sugerencias para otros idiomas: Haskell. Es un nivel muy alto; escribirlo en "estilo de bajo nivel" puede ser muy rápido (se puede comparar bastante con C) y es aún mejor si puede hacer uso de sus capacidades de subprocesamiento múltiple. Sin embargo, la experiencia dice que nunca es bueno aprender a usar nuevas herramientas mientras se necesitan en un proyecto.

+0

haskell parece interesante, algún consejo para un buen tutorial de FP? Especialmente, las matemáticas relacionadas serían buenas. –

+0

@Dhaivat esto es increíblemente bien escrito y amigable para principiantes: http://learnyouahaskell.com/ – MattiaG

+0

también, más comparación de rendimiento: http://www.lix.polytechnique.fr/~kaustuv/expo/incr_uarray/#first- ocaml – MattiaG

0

Apache Commons Math retomó el lugar donde lo dejó JAMA. Son bastante capaces de computación científica.

Así es Python - NumPy y SciPy son excelentes. También me gusta el hecho de que Python es un híbrido de orientación a objetos y programación funcional. La programación funcional es tremendamente útil para los métodos numéricos.

Recomendaría utilizar la que mejor conozca, pero si la opción es un lanzamiento, podría inclinarme hacia Python.

Cuestiones relacionadas