Domanda delicata: dove si inserisce Python nell'immagine?


9

Quindi ho discusso se dovrei preoccuparmi o meno di imparare Python. Dal parlare con i miei professori, Matlab sembra essere il linguaggio comune usato nella matematica applicata / scienze computazionali per quanto riguarda il mondo accademico ; mentre nell'industria , i miei professori (specialmente quelli che hanno lavorato nell'industria) hanno affermato che l'apprendimento del c ++ è la strada più sicura.

Mi piacerebbe sentire da quelli di voi, sia nel mondo accademico che in quello industriale, se dovrei preoccuparmi di Python o semplicemente diventare bravo in quello che conosco (MATLAB e C ++) per il momento.

Aggiornamento : Geoff evidenzia un buon punto, probabilmente dovrei definire alcuni dettagli:

Sono attualmente un laureando nel mio ultimo anno, studiando matematica con una specializzazione in calcolo. Mi piacerebbe frequentare una scuola di specializzazione e rimanere nella ricerca (non mi sono mai visto divertire a insegnare) o lavorare in un laboratorio. Entrambi sono ideali. Per quanto riguarda le aree di ricerca, probabilmente qualcosa sulla falsariga di analisi numerica o probabilità. Nel caso in cui il piano A non funzioni, sarei aperto a lavorare nell'industria, purché prepararmi per l'industria non mi prenda troppo tempo da scuola. Quindi, ho pensato che avrei dovuto imparare le lingue che sono comuni nel settore proprio come backup. Ma è anche per questo che sono in conflitto. Non posso studiare tutte le lingue o prepararmi per ogni possibilità poiché ciò richiederebbe troppo tempo.


1
La tua domanda è buona, ma probabilmente un po 'troppo aperta e vaga. Quale disciplina stai studiando e cosa pensi che potresti voler fare?
Geoff Oxberry,

1
Per un esempio di cose che possono essere fatte con Python che non funzionerebbero bene in MATLAB o C ++ puro: epubs.siam.org/doi/abs/10.1137/110856976 . (avviso di autopromozione spudorata)
David Ketcheson,

Risposte:


15

Una difficoltà con uno di questi tipi di domande è che la risposta dipende fortemente dalla comunità.

Per rispondere ad alcune delle tue domande in ordine casuale:

MATLAB è molto utilizzato sia nel mondo accademico che nell'industria. Uno dei motivi per cui viene usato un po 'nell'industria è perché viene insegnato nel mondo accademico. So per certo che MATLAB è usato al Lincoln Laboratory e nelle divisioni di ricerca e sviluppo di DuPont.

Ci sono pacchetti software scritti in Python che sono bravi nel calcolo simbolico, come sympy e SAGE. A seconda dei tuoi interessi particolari, requisiti di funzionalità e preferenze personali, Mathematica (o Maple o altri sistemi di algebra del computer) potrebbe essere superiore a questi pacchetti.

MATLAB ha una Symbolic Math Toolbox che può essere utilizzata per alcuni calcoli simbolici, ma le sue capacità di manipolazione simbolica, secondo la mia esperienza, sono più deboli di Mathematica e Python. Qualche manipolazione simbolica potrebbe teoricamente essere fatta in C ++, ma è ingombrante. Anche MATLAB non è un buon linguaggio di uso generale. Fa bene l'algebra lineare e la matematica numerica, ma non ha buone capacità di input / output. Non ha buone capacità parallele (anche se ci sono varianti come MATLAB parallelo, MATLAB Star-P e Parallel Computing Toolbox) rispetto a C ++ o Python. Anche le sue capacità grafiche potrebbero usare del lavoro. MATLAB è anche costoso a meno che tu non sia affiliato con un istituto che ha una licenza. Ogni cassetta degli attrezzi è costosa da acquistare e generalmente costa nell'ordine di centinaia o migliaia di dollari.

Mathematica esegue calcoli numerici oltre al calcolo simbolico. Non ho visto persone usarlo per il calcolo numerico tanto quanto ho visto persone usare Python e MATLAB per il lavoro numerico. Anch'esso ha capacità parallele, ma non si ridimensionerà a grandi supercomputer.

Python è un buon linguaggio di uso generale che è considerato facile da imparare e utilizzabile. È usato su grandi supercomputer (vedi, ad esempio, PyClaw, petsc4py, mpi4py e altri) e si adatta bene. Ha anche dei pacchetti numerici molto apprezzati (come NumPy e SciPy); una grande comunità attiva; buone capacità di elaborazione input / output; e buone librerie grafiche, insieme a un ampio repository di librerie (controlla PyPI). È gratuito, rispetto ai pacchetti proprietari di cui sopra. Puoi trovare la maggior parte delle funzionalità di MATLAB o Mathematica nei pacchetti Python disponibili gratuitamente. Lo svantaggio principale di Python è che tende ad essere più lento dei linguaggi compilati come C ++, sebbene questo svantaggio diminuisca con il continuo sviluppo di Cython, Numba e PyPy; può anche essere mitigato sostituendo il codice Python più lento con il codice C (o C ++ o Fortran) e wrapper Python scritti in modo appropriato. In fase di interpretazione, molte persone riportano una maggiore produttività con Python rispetto ai linguaggi compilati. È abbastanza popolare e probabilmente vale la pena imparare se hai tempo.

Il C ++ è un linguaggio complicato e il suo uso nella scienza computazionale è controverso. Il suo ampio set di funzionalità può semplificare la scrittura di software difficile da gestire e che richiede un'eternità per la compilazione. Tuttavia, usate con giudizio, funzionalità come il templating e il sovraccarico dell'operatore possono essere impiegate con grande efficacia, come è stato in progetti come deal.II, Blaze ed Elemental (tra gli altri). Il C ++ ha una ripida curva di apprendimento quando si tratta delle sue funzionalità avanzate e ho sentito resoconti aneddotici di persone che impiegano anni a pensare di aver appreso il linguaggio completo. Tuttavia, è anche una lingua popolare, nonostante i problemi di usabilità e il complesso set di funzionalità. Probabilmente vale la pena imparare, anche solo per rendersi più occupabile; i suoi principali concorrenti nella scienza computazionale sono Fortran e C, che vale anche la pena imparare.

Qualunque cosa tu decida di imparare, si baserà su ciò di cui hai effettivamente bisogno. Certo, è bello imparare sia Python che C ++, ma dati i vincoli di tempo e risorse, probabilmente imparerai solo ciò che devi effettivamente usare e che dipende dalla comunità in cui lavori.


Per quanto riguarda il mondo accademico, diresti che è meglio investire tempo nell'apprendimento di Python anziché in C ++?
AlanH

1
Ancora una volta, tutto dipende. Sono ancora più accademico e utilizzo sempre Python. Devo ancora usare C ++ per il lavoro scritto in quella lingua. La mia opinione personale è che apprendere prima Python probabilmente ti ripagherà più rapidamente che se avessi imparato prima il C ++, ma non so quali probabilisti / processi stocastici / combinatoria usino le persone, quindi il tuo chilometraggio può variare.
Geoff Oxberry,

Concordo con Geoff che apprendere prima Python è una buona idea, poiché ti farà andare molto più veloce. Il C ++ è un buon linguaggio, ma la curva di apprendimento è significativamente più alta e l'apprendimento a metà è discutibilmente peggiore del non impararlo affatto.
LKlevin,

"Il C ++ ha una ripida curva di apprendimento quando si tratta delle sue funzionalità avanzate e ho sentito resoconti aneddotici di persone che impiegano anni a sentirsi come se avessero imparato il linguaggio completo". Sì, non potrei essere più d'accordo. Penso che qualsiasi programmatore degno del suo sale dovrebbe imparare c / c ++ un po 'di tempo nella sua vita, ma ci vorranno sicuramente 10000 ore per sentirti davvero un esperto con loro. +1
James,

11

Come hanno sottolineato Misha e Geoff Oxberry, Mathematica ha davvero un focus diverso (solo perché puoi battere un'unghia con un cacciavite non significa che dovresti). Quindi prendo la tua domanda come "Se conosco Matlab, perché dovrei imparare Python?" [Modifica: e così, apparentemente, hai fatto.]

A tutti gli effetti, Matlab è l'inglese dell'informatica scientifica - con tutte le connotazioni positive e negative che questa analogia comporta. Un punto specifico è che il codice Matlab è probabilmente utile (ovvero eseguibile e comprensibile) a più persone rispetto al codice in qualsiasi altra lingua. (Questo è il motivo principale per cui fornisco i codici Matlab per tutti i miei algoritmi.) Inoltre, il desktop Matlab può essere davvero utile durante la prototipazione, in particolare la possibilità di eseguire bit di codice (celle) direttamente dall'editor, nonché il nel profiler.

Detto questo, se vuoi imparare un'altra lingua di alto livello per divertimento e profitto, potresti fare di peggio di Python. Alcuni motivi oltre a quelli elencati da Geoff:

  • È molto più facile interfacciarsi con programmi e librerie esterne in Python. Niente più file mex!

  • Se sei lontano dal tuo desktop, è molto più semplice avviare e utilizzare Python + NumPy / SciPy che ottenere l'accesso a una licenza Matlab.

  • Il motivo principale per cui Matlab è più veloce di NumPy è che raggruppa librerie di fornitori ottimizzate per l'algebra lineare (MKL, ACML). È possibile ( se un po 'noioso ) costruire il proprio NumPy e collegarlo con le stesse librerie per ottenere quasi le stesse prestazioni (e multithreading) di Matlab per l'algebra lineare, oltre alle migliori prestazioni di Python per tutto il resto. (Anche se questo ovviamente richiede una licenza anche per uso accademico, annullando così il bonus del software libero, è comunque un'opzione interessante avere lo stesso codice funzionante su un'installazione accelerata sponsorizzata dal datore di lavoro in ufficio e su uno scaffale standard installa sul tuo computer di casa o notebook.)

  • Mentre gli strumenti di Matlab sono uno dei suoi punti di forza, ci sono alcune aree in cui Python è molto avanti; in particolare, SymPy e FEniCS battono gli strumenti simbolici e PDE con un ampio margine.

  • Non dimenticare la parte divertente ( nonostante lo spazio bianco semantico e l' associazione dei nomi ): ho visto diversi colleghi essere morsi dal bug di Python, e c'è davvero qualcosa di stranamente soddisfacente nello scrivere il tuo algoritmo in Python che non c'è in Matlab ( anche se potrebbe essere solo la gioia di imparare una lingua straniera) :)

(Se inizi con NumPy, potresti trovare utile questa pagina .)


5

Python può essere sostitutivo sia per c ++ che per Matlab. È ben diffuso sia nel mondo accademico che nell'industria. Nell'industria è talvolta usato come colla per linguaggi di livello inferiore, principalmente c / c ++. Mathematica è completamente un'altra storia. Il suo principale vantaggio è dove tutti gli altri citati (c / c ++; Matlab; Python) non sono buoni: nei calcoli simbolici.

Quindi, tutti e quattro sono completamente diversi: c ++ è un linguaggio di programmazione vecchio e stabile di livello relativamente basso; Python è un linguaggio informatico di alto livello nuovo e in evoluzione; Matlab è un ambiente computazionale numerico con un forte accento sull'algebra vettoriale (sebbene sia in grado di fare più o meno tutto); Mathematica è un sistema di algebra computerizzata con un forte accento sui calcoli simbolici (la stessa osservazione di Matlab). Pertanto, non sono concorrenti.


Infatti; Sono spesso perplesso (e talvolta stupito) quando vedo persone che usano Mathematica per il calcolo scientifico ...
Christian Clason,

@ChristianClason e Misha: è un'idea sbagliata che Mathematica sia principalmente un sistema di algebra computerizzata. Se si guarda a come le persone utilizzano effettivamente esso , la maggior parte è non algebra simbolica, e in diversi campi numerici che è competitivo con strumenti come MATLAB e R. (Personalmente sceglierei Mma su questi altri due per la maggior parte dei dati numerici di elaborazione compiti , ma ovviamente è una preferenza personale.) In alcune aree, come l'integrazione numerica o la visualizzazione, sembra essere in vantaggio su MATLAB. In altri come PDE risolvere è molto indietro.
Szabolcs,

Per qualcuno il cui unico interesse è il calcolo numerico, Python è un'alternativa a MATLAB che è un linguaggio di livello relativamente elevato simile nella sua capacità di utilizzare routine di libreria per gestire calcoli standardizzati che comportano algebra lineare, trasformazioni di Fourier, funzioni speciali, ecc. Sì, Python è molto più ampiamente applicabile, ma copre tutto ciò che potresti fare in MATLAB.
Brian Borchers,

4

So che la tua domanda riguarda l'uso di Python, ma hai detto che eri interessato a "analisi numerica o probabilità". Non so se hai considerato R , ma è progettato specificamente per questo tipo di lavoro. R è un linguaggio molto potente per probabilità e statistica e ha una base di utenti molto ampia e attiva di matematici e scienziati.

R è diverso da Matlab nel senso che è open-source, ha un focus sulle statistiche e crea delle trame molto impressionanti (vedi ggplot2 ). Puoi fare quasi tutto in R che puoi fare in Matlab, ma il mio aspetto preferito è il contributo dell'utente. La maggior parte delle biblioteche fornite sono state scritte da scienziati e pubblicate in una rivista statistica. Hanno anche guide estremamente ben scritte (chiamate riferimenti e vignette). La mia nuova libreria preferita offre supporto CUDA basato sulle librerie CULA (gratuito per uso accademico). Esiste anche una quantità prodigiosa di metodi per la teoria della probabilità (vedi qui ).

Ad ogni modo, R è sicuramente progettato specificamente per la tua linea di lavoro, quindi dai un'occhiata e considera di aggiungerlo al tuo toolkit :) Ricorda, puoi eseguire gli script R in Python e gli script Python in R e catturare facilmente gli output.

Buona fortuna!


2

Altri hanno già commentato a lungo e in modo più approfondito di quanto proverò qui. Tuttavia, vorrei sottolineare ancora una volta un punto: dipende dalla tua comunità. Ad esempio, se stai lavorando a un progetto di ingegneria elettrica, è probabile che utilizzerai matlab; lo stesso può valere se sei un analista numerico che desidera verificare la stima del tuo tasso di convergenza su un semplice problema del modello.

D'altra parte, se ti piacciono i calcoli scientifici propri (ad esempio, simulare il flusso attorno ad un profilo aerodinamico, simulare la fusione nucleare in un plasma, simulare la convezione nel mantello terrestre) o sviluppare metodi numerici tenendo conto di tali applicazioni, allora la lingua franca è C ++. Ogni pacchetto di calcolo scientifico su larga scala è oggi scritto in C ++ (o C), nel bene e nel male, ed è così che rimarrà per molto tempo. Per citare solo alcuni esempi, PETSc e i pacchetti Trilinos incredibilmente grandi e diversi sono scritti rispettivamente in C e C ++. Tra le grandi librerie di elementi finiti open source che mi viene in mente (libMesh, deal.II, oofem, freefem) ognuna è scritta in C ++. Tra i programmi di visualizzazione, i due più grandi (Visit e Paraview) sono scritti in C ++. Potrei estendere l'elenco.

Il punto è che se ti accontenti di simulazioni su piccola scala, le persone usano una lingua, ma ogni volta che si tratta di calcoli seri, forse paralleli, usano tutti qualcos'altro. È sicuramente una cosa di comunità, ma anche con l'interoperabilità - se PETSc e Trilinos sono scritti in C e C ++, allora io (essendo l'autore di deal.II) non posso facilmente scegliere qualsiasi altra lingua anche se volessi perché Devo lavorare con PETSc e Trilinos.


1
Ad essere onesti, ci sono molti utenti PETSc provenienti da Fortran e alcuni da Python. C è facile da chiamare da quasi tutte le lingue, anche se la programmazione in lingua mista comporta una serie di sfide e non la consiglio molto spesso. Anche il problema di dove risiede nello stack il codice è troppo spesso trascurato. Le applicazioni per l'utente finale dovrebbero fare scelte di progettazione software diverse rispetto alle librerie a livello di sistema, ad esempio.
Jed Brown,

È giusto. Tuttavia, è vero che i più recenti esempi di software utilizzati nei calcoli su larga scala sono scritti in modo schiacciante in questi giorni in C e C ++ (nonostante i vecchi ritardi scritti in Fortran).
Wolfgang Bangerth,

1

Per aggiungere i miei due centesimi, ho avuto sia un'esperienza accademica recente (un nuovo dottorato di ricerca :)) sia esperienza nel settore (un produttore di apparecchiature per il rilevamento).

Facciamo molti calcoli numerici su processori integrati deboli (pensate ai processori per telefoni cellulari). A parte il fatto che non esiste MATLAB per ARM, C ++ è il re in questo mondo: molte suite di compilatori incorporati non includono FORTAN!

Mentre disponiamo di un numero limitato di licenze MATLAB, il requisito di fare un prodotto che attira 2 Watt di potenza distorce il nostro lavoro di sviluppo a favore del C ++ (sperimentazione a parte).

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.