2010-05-27 12 views
5

Mis intereses en la programación se basan principalmente en algoritmos, y últimamente he visto a muchos investigadores acreditados escribir mucho de su código en python. ¿Qué tan fácil y conveniente es Python para la informática científica? ¿Tiene una biblioteca de algoritmos que se compara con la de Matlab? ¿Python es un lenguaje de scripting o compila? ¿Es un gran lenguaje para crear prototipos de un algoritmo? ¿Cuánto tiempo me tomaría aprender lo suficiente para ser productivo siempre que conozca bien C y la programación OO? ¿Está basado en OO?¿Es apropiado Python para algoritmos enfocados en computación científica?

Disculpe el formato condensado de las preguntas, pero tengo mucha curiosidad y esperaba que un programador más experimentado pudiera ayudarme.

+12

Mientras estamos en el tema, ¿cuál es el trato con la comida de la línea aérea? – kubi

+7

Lo sentimos, pero ¿no puedes simplemente googlearlo? –

+0

http://docs.python.org/index.html – twneale

Respuesta

14

¿Qué tan fácil y conveniente es Python para computación científica?

Very! Deberías intentar asistir a las conferencias SciPy (cada año hay una en los EE. UU. Y una en Europa) para sentirte realmente bien, pero incluso el resto del sitio scipy.org debería darte una impresión.

¿Tiene una biblioteca de algoritmos que se pueda comparar con los de matlab?

No sé matlab, pero la cantidad de cosas disponibles en/para Python es asombrosa.

¿Es Python un lenguaje de scripting o compila?

Python es un lenguaje de , y ofrece muchas implementaciones (todo de código abierto). El más popular, CPython, compila fuentes en su propio bytecode que luego ejecuta su máquina virtual (la compilación es muy rápida y se realiza de forma transparente cuando es necesario, pero los archivos compilados normalmente se almacenan en el disco y se compilan sólo cuando es necesario). Eso es muy similar a Java/JVM o C#/.Net, excepto que el paso de compilación se puede subsumir con el paso de ejecución (pero, por supuesto, puede tener un sistema de compilación que compila con anticipación, si lo desea).

Jython compila el bytecode de JVM, que luego ejecuta una JVM; IronPython de Microsoft (su primer proyecto de código abierto, creo) compila a CRL (".Net bytecode") que .Net y Mono pueden ejecutar. Ambos admiten compilación justo a tiempo y anticipada a sus respectivos códigos de bytes.

PyPy puede compilar fuentes de Python para muchas cosas, incluyendo (para un subconjunto de Python) directamente (anticipado) al lenguaje de máquina nativo o (para todo Python) a un código intermedio que luego se compila en la máquina lenguaje en la forma justo a tiempo. PyPy es increíblemente flexible en términos del tipo de sistemas de compilación que puede configurar. (Su nombre proviene del hecho de que está codificado en Python, y eso sin dudas es una ventaja en muchos términos, pero la velocidad del código que crea y su flexibilidad son sus principales fortalezas en la actualidad).

Estas cuatro implementaciones son todas de calidad de producción en este momento (históricamente, llegaron a ser así en el orden que he enumerado, PyPy más recientemente, y realmente bastante recientemente, pero me gusta mucho lo que veo allí en estos días)

¿Es un lenguaje excelente para el prototipado un algoritmo?

No puedo pensar en una mejor; ver chapter 18 del libro de cocina de Python, especialmente la introducción de Tim Peters, para más. Esa introducción es totalmente legible en el enlace de Google Books que acabo de dar, y realmente no puedo hacerle justicia en lo que ya va a ser una larga respuesta de SO; por favor haga clic en el enlace y lea esa introducción!

¿Cuánto tiempo me tomará para aprender lo suficiente como para ser productivo proporcionado Conozco bien y C OO programación algo?

Cuando conocí a Python, después de navegar por el tutorial, decidí darle una oportunidad cuando tuve un fin de semana con mi familia lejos: me gustaría dedicar un fin de semana (de viernes a domingo 18:00 de la medianoche, o bueno, quizás sea lunes) para aprender el idioma haciendo en él una aplicación web CGI para calcular y mostrar varios tipos de probabilidades de bridge (como un entusiasta del bridge, pero conocido en el campo principalmente a través de mi probabilidad y el trabajo informático al respecto , es un problema que he amado hace mucho: aprendí de Fortran en mi primer año, aunque en ese momento como estudiante de educación superior no se suponía que debía hacer programación hasta el penúltimo año, al perforar tarjetas para resolver ese tipo de problema;)

Por supuesto que no esperaba acabado la tarea desde cero en 54 horas o menos (hora menos de sueño ;-) mientras que la enseñanza a mí mismo la lengua y su biblioteca (CGI y los algoritmos necesarios que ya conocía bien) , pero quería ver hasta dónde llegaría (evaluando Python frente a los otros idiomas en los que era gurú en ese momento, principalmente perl y C++).

Menos de 24 horas más tarde (hay que haber dormido muy poco esa noche, estaba demasiado emocionado), di un paso atrás y tuve que admitir que había terminado, no solo mi pequeña aplicación web CGI tenía toda la funcionalidad tenía en mente, pero también pude dar salida en diferentes lenguajes naturales construyendo desde cero un pequeño sistema de plantillas (sabía que había muchas) por eso llamé a la mía yaptu, "Otra herramienta de plantillas de Python" - - pero simplemente no tuve tiempo de aprender nada fuera del idioma y la biblioteca estándar ... rodar el mío fue más rápido ;-).

Fue entonces cuando me enamoré irremediablemente de Python. No mucho tiempo después, terminé abandonando mi carrera actual de alto vuelo por un hechizo escribiendo libros y trabajando independientemente con Python, y unos años más tarde me moví a través de un océano y dos continentes para unirme a una de las compañías más grandes que usaba Python (mi actual empleador, Google), mientras tanto se había vuelto a casar (a mi esposa actual, Anna, también fue coautora en uno de mis libros y la primera mujer miembro de la Python Software Foundation). Nuestra placa de "vanidad" lee P ♥ THON ... ;-). Entonces, OK, soy parcial. Pero todo comenzó con esos < 24 horas en las que logré más de lo que esperaba hacer en> 54 horas (a pesar de ser, como todos los desarrolladores de SW, un optimista incurable cuando se trata de "cuánto tiempo me tomará hacer X "para cualquier X centrada en SW ;-).

¿Está basado en OO?

Sí, pero multi-paradigma (como C++ ... pero incluso más de C++) - usted no tiene que utilizar class es cuando no los necesita, y tiene un apoyo razonable para el dia también la programación (definitivamente no es tan profunda como los lenguajes de FP "verdaderos" como Haskell, pero sigue siendo muy útil para muchas tareas).

+3

1 para la historia personal. –

+0

Gracias por la respuesta detallada que disfruté leyéndolo :) – ldog

+0

Deberías mencionar que eres coautor del Python Cookbook – jfs

11

Bytecompiles, y luego envía el bytecode a través de un intérprete.

Official Tutorial

NumPy

le fijan ahora.

+0

ohhh numpy has fft :) Me está gustando ya – ldog

+1

@gmatt, python viene con 'baterías incluidas'. Encontrará que el poder de Python es que el lenguaje en sí es sucinto y limpio, mientras que las bibliotecas son amplias y cuentan con todas las funciones.Le llevará mucho más tiempo aprender qué hay en las bibliotecas estándar que dominar el lenguaje central. –

16

¿Qué tan fácil y conveniente es python para la informática científica?

Scipy/NumPy.

¿Tiene una biblioteca de algoritmos que se pueda comparar con la de matlab?

Sí.

¿Python es un lenguaje de scripting o compila?

Interpreted.

¿Es un gran lenguaje para crear prototipos de un algoritmo?

Sí.

¿Cuánto tiempo me llevaría aprender lo suficiente como para ser productivo siempre que conozca bien C y la programación OO?

Depende.

¿Está basado en OO?

Sí.

+7

Debe tenerse en cuenta con respecto a OO, mientras que python está orientado a objetos, no obliga a un paradigma de OO en el usuario como lo hace Java o C#. Todo es un objeto, pero puede programarlo en un estilo funcional, OO o de manera manual. –

+0

1 sucintamente :) – bedwyr

+1

Python se compila en el código de bytes que se interpreta entonces como Java – jfs

2

Creo que si comienzas a leer algunos de los enlaces que encuentras en this page, aprenderás bastante sobre el lenguaje de programación Python.

4

He utilizado Python durante 6 años para la informática científica. Habiendo venido de matlab/IDL, fue muy fácil hacer el cambio ya que también se interpreta.

Hay herramientas de terceros como SciPy y Matplotlib para ayudar específicamente con el análisis/visualización de datos. Además, si miras en Amazon, hay libros dirigidos a esta audiencia.

Python también se utiliza muy a menudo para enseñar programación debido a su sintaxis simple pero poderosa.

8

responder a su pregunta uno por uno:

¿Qué tan fácil y conveniente es Python para la computación científica?

Un gran punto de python es que proporciona una forma muy intuitiva de escribir código. La potente estructura de datos incrustados, como el diccionario y la lista, te ayudaría mucho en la informática científica. Además, como lenguaje dinámico, no necesita tratar muchos detalles de bajo nivel que tiene que hacer en C.

¿Tiene una biblioteca de algoritmos que se compare con los de matlab?

De hecho, python tiene una gran cantidad de biblioteca de algoritmos. Por ejemplo, puede usar NumPy y SciPy para admitir matrices grandes y matrices multidimensionales y la compilación de matrices. Y usted puede encontrar más detalles en los enlaces:

  1. sitio oficial de numpy: http://numpy.scipy.org/
  2. Wikipedia de numpy: http://en.wikipedia.org/wiki/NumPy

Además, pitón también tiene la biblioteca para apoyar el análisis de redes. Por ejemplo, la biblioteca de networkx es una gran herramienta para el análisis de gráficos.

¿Python es un lenguaje de scripts o se compila?

En general, python está diseñado como un lenguaje de scripting. Pero también hay herramientas para compilar, por ejemplo, py2exe. Te recomiendo que uses python como lenguaje de scripting. Creo que puedes tener problemas de rendimiento con respecto a Python. Y una solución generalmente aplicada es escribir esos módulos críticos de rendimiento en c/C++, y pegarlos mediante SWIG.

¿Es un excelente lenguaje para crear prototipos de un algoritmo?

Sure it is. Con la gran compatibilidad de la estructura de datos integrada, puede implementar rápidamente algún algoritmo complicado con código más corto en comparación con C/C++. Un ejemplo típico es el siguiente:

//C++ loop a one dimensional array and print value 
    const int N = 100; 
    int A[N]; 
    for (int i = 0; i < N; ++i) 
     cout << i; 

#python loop a one dimensional array and print value 
for i in range(100): 
    print i 

Y como un lenguaje de script, no es necesario compilar, ejecutar, compilar, ejecutar, lo que ahorraría mucho tiempo.

¿Cuánto tiempo me llevaría aprender lo suficiente como para ser productivo siempre que conozca bien C y la programación OO? ¿Está basado en OO?

Python es diferente de C. Es posible que no sea muy convincente escribir código c-style en python. Pero Python es fácil de comenzar, la mayoría de las sintaxis son simplemente inglesas. Además, hay algunos excelentes tutoriales para Python. Por ejemplo, bucear en python es muy bueno para los principiantes.

Python proporciona un mecanismo para la programación basada en OO.

+0

Muchas personas (incluido este tipo) pensar Inmersión en Python es un libro de basura para los principiantes. http://oppugn.us/posts/1272050135.html –

+0

@Dominic Bou-Samra, bueno, tal vez diferentes personas tienen diferentes ideas, pero de hecho me he apoyado mucho de este libro –

3

Si conoce C y alguna programación orientada a objetos, aprenderá Python muy rápidamente: la mayoría de las cosas clave en unas pocas horas de lectura/retoques con ella.Aquí están los principales diferenciadores: - Diseñado para ser fácil de aprender rápidamente y para fomentar la escritura de código legible. - Tiene la menor cantidad de verrugas de cualquier lenguaje de programación orientado a objetos. - Sin embargo, no obliga a escribir código orientado a objetos. - Facilita la escritura de scripts que pueden ejecutarse de forma independiente o importarse en otros.

Características Orientadas a objetos: - Polimorfismo verdadero. A diferencia de C++ y sus derivados, como Java, no tiene que preocuparse por hacer que su código sea polimórfico, genérico y reutilizable, incluso en formas que no pensó antes. Esto se debe a que, aunque está fuertemente tipado, no está tipado estáticamente. Siempre que sus objetos tengan los métodos o atributos esperados que un pedazo de código quiere, funcionará. Esto se conoce como tipa de pato.
- Introspección: para que pueda verificar fácilmente si un método o atributo está presente antes de acceder a él. También es ideal para la depuración. - Puede agregar atributos e incluso métodos a objetos en tiempo de ejecución. Código muy maleable. - Admite herencia múltiple.

Problemas: - Típicamente más rápido que Ruby pero a veces más lento que Java. - Tienes que acostumbrarte a ver la palabra "yo" por todos lados. - Difícil para los desarrolladores de estilo C dejar de tener que escribir llaves y punto y coma. Ver un código sencillo como ese puede hacerte sentir como si faltara algo.

Hay una guía de estilo de programación que todos los desarrolladores de Python están destinados a seguir: http://www.python.org/dev/peps/pep-0008/

Hay una variante de la misma que es más rápido que la versión principal y es compatible con un fácil utilizar el mecanismo de concurrencia. Se lo conoce como Stackless Python porque elimina el uso de C stack. EVE Online está escrito en este idioma.

Aquí hay un ejemplo de algo que supongo que podría considerarse una programación científica: ajustar las ondas de sonido, simplemente es genial, desplácese hacia abajo para ver la fuente y vea qué tan simple es. http://musicmachinery.com/2010/05/21/the-swinger/

1

Es Python apropiada para los algoritmos se centraron en la computación científica?

1

Se preguntó sobre compilado/interpretado. Si su preocupación aquí es la velocidad de ejecución, hay un aspecto de python que no parece haber sido cubierto explícitamente --- puede usar herramientas como SWIG y boost.python para hacer que sus paquetes C/C++ rápidos como relámpagos aparezcan en su python como módulos. Una vez que llegue al módulo, se ejecutará a la velocidad/eficiencia de la implementación C/C++ subyacente. Muchos módulos están disponibles que aprovechan esto.

Así que puedes hacer todo lo organizacional en Python claro, flexible y fácil de aprender, y luego cuando llegas a tu gran número de crujidos, puedes pasar el problema a una rutina rápida y eficiente. Obtienes lo mejor de ambos mundos.

Cuestiones relacionadas