Pertanyaan Lembut: Di manakah Python cocok dengan gambar?

9

Jadi saya sudah berdebat apakah saya harus repot-repot belajar Python. Dari berbicara dengan profesor saya, Matlab tampaknya menjadi bahasa umum yang digunakan dalam matematika terapan / ilmu komputasi sejauh menyangkut akademisi ; sementara di industri , profesor saya (terutama mereka yang telah bekerja di industri) mengatakan bahwa belajar c ++ adalah rute teraman.

Saya ingin mendengar dari Anda, baik di dunia akademis dan industri, tentang apakah saya harus repot-repot dengan Python, atau hanya menjadi sangat baik pada apa yang saya tahu (MATLAB dan C ++) untuk saat ini.

Pembaruan : Geoff menampilkan poin yang bagus, saya mungkin harus memberikan beberapa rincian lebih lanjut:

Saya saat ini adalah mahasiswa tingkat satu di tahun terakhir saya, belajar matematika dengan spesialisasi dalam perhitungan. Saya ingin melanjutkan sekolah pascasarjana dan tetap dalam penelitian (saya belum pernah melihat diri saya menikmati mengajar) atau bekerja di laboratorium. Keduanya ideal. Seperti apa bidang penelitian, mungkin sesuatu yang sejalan dengan analisis numerik atau probabilitas. Jika rencana A tidak berhasil, saya akan terbuka untuk bekerja di industri, selama mempersiapkan diri untuk industri tidak mengambil terlalu banyak waktu dari sekolah. Jadi, saya pikir saya harus belajar bahasa yang umum di industri hanya sebagai cadangan. Tetapi ini juga mengapa saya berkonflik. Saya tidak dapat mempelajari setiap bahasa atau mempersiapkan diri untuk setiap kemungkinan karena itu akan memakan banyak waktu.

AlanH
sumber
1
Pertanyaan Anda bagus, tetapi mungkin agak terlalu terbuka dan tidak jelas. Apa disiplin yang Anda pelajari, dan menurut Anda apa yang mungkin ingin Anda lakukan?
Geoff Oxberry
1
Untuk contoh hal-hal yang dapat dilakukan dengan Python yang tidak akan berfungsi dengan baik di MATLAB atau C ++ murni: epubs.siam.org/doi/abs/10.1137/110856976 . (lansiran promosi diri yang memalukan)
David Ketcheson

Jawaban:

15

Kesulitan dengan jenis pertanyaan ini adalah bahwa jawabannya sangat tergantung pada masyarakat.

Untuk menjawab beberapa pertanyaan Anda dengan urutan serampangan:

MATLAB banyak digunakan di dunia akademis dan industri. Salah satu alasan mengapa ini digunakan cukup banyak dalam industri adalah karena ia diajarkan di dunia akademis. Saya tahu fakta bahwa MATLAB digunakan di Laboratorium Lincoln dan di divisi penelitian dan pengembangan DuPont.

Ada paket perangkat lunak yang ditulis dalam Python yang bagus dalam perhitungan simbolik, seperti sympy dan SAGE. Tergantung pada minat khusus Anda, persyaratan fitur, dan preferensi pribadi, Mathematica (atau Maple, atau sistem aljabar komputer lainnya) mungkin lebih unggul daripada paket-paket ini.

MATLAB memiliki Toolbox Matematika Simbolik yang dapat digunakan untuk beberapa perhitungan simbolik, tetapi kemampuan manipulasi simbolisnya, menurut pengalaman saya, lebih lemah daripada Mathematica dan Python. Beberapa manipulasi simbolis secara teoritis dapat dilakukan dalam C ++, tetapi sangat sulit. MATLAB juga bukan bahasa tujuan umum yang baik. Ia melakukan aljabar linear dan matematika numerik dengan baik, tetapi tidak memiliki kemampuan input / output yang baik. Itu tidak memiliki kemampuan paralel yang baik (meskipun ada varian seperti MATLAB paralel, MATLAB Star-P, dan Toolbox Komputasi Paralel) dibandingkan dengan C ++ atau Python. Bahkan kemampuan grafisnya bisa menggunakan beberapa pekerjaan. MATLAB juga mahal kecuali Anda berafiliasi dengan lembaga yang memiliki lisensi. Setiap kotak peralatan mahal untuk dibeli, dan umumnya berharga ratusan hingga ribuan dolar.

Mathematica melakukan perhitungan numerik di samping perhitungan simbolik. Saya belum pernah melihat orang menggunakannya untuk perhitungan numerik sebanyak yang saya lihat orang menggunakan Python dan MATLAB untuk pekerjaan numerik. Ini juga memiliki kemampuan paralel, tetapi tidak akan skala ke superkomputer besar.

Python adalah bahasa tujuan umum yang baik yang dianggap mudah dipelajari dan dapat digunakan. Ini digunakan pada superkomputer besar (lihat, misalnya, PyClaw, petsc4py, mpi4py, dan lainnya), dan skala dengan baik. Ini juga sangat menghargai paket numerik (seperti NumPy dan SciPy); komunitas besar yang aktif; kemampuan pemrosesan input / output yang baik; dan pustaka grafis yang baik, bersama dengan gudang pustaka yang besar (lihat PyPI). Ini gratis, dibandingkan dengan paket eksklusif yang disebutkan di atas. Anda dapat menemukan sebagian besar fungsi MATLAB atau Mathematica dalam paket Python yang tersedia secara bebas. Kerugian utama dari Python adalah bahwa ia cenderung lebih lambat daripada bahasa yang dikompilasi seperti C ++, meskipun kerugian ini berkurang dengan terus berkembangnya Cython, Numba, dan PyPy; ini juga dapat dikurangi dengan mengganti kode Python yang lebih lambat dengan kode C (atau C ++, atau Fortran) dan pembungkus Python yang ditulis dengan tepat. Ditafsirkan, banyak orang melaporkan produktivitas yang lebih tinggi dengan Python daripada bahasa yang dikompilasi. Ini cukup populer, dan mungkin layak dipelajari jika Anda punya waktu.

C ++ adalah bahasa yang rumit, dan penggunaannya dalam ilmu komputasi adalah kontroversial. Set fiturnya yang besar dapat membuatnya mudah untuk menulis perangkat lunak yang sulit dipelihara dan membutuhkan waktu lama untuk dikompilasi. Namun, digunakan dengan bijaksana, fitur seperti templating dan overloading operator dapat digunakan untuk efek yang besar, seperti pada proyek-proyek seperti deal.II, Blaze, dan Elemental (antara lain). C ++ memiliki kurva belajar yang curam ketika datang ke fitur-fiturnya yang canggih, dan saya telah mendengar laporan anekdotal dari orang yang membutuhkan waktu bertahun-tahun untuk merasa seperti mereka telah mempelajari bahasa lengkap. Namun demikian, ini juga merupakan bahasa yang populer, terlepas dari masalah kegunaan dan set fitur yang rumit. Mungkin perlu belajar, jika hanya untuk membuat diri Anda lebih mudah dipekerjakan; pesaing utamanya dalam ilmu komputasi adalah Fortran dan C, yang juga patut dipelajari.

Apa pun yang Anda putuskan untuk pelajari akan didasarkan pada apa yang sebenarnya Anda butuhkan. Tentu, senang mempelajari Python dan C ++, tetapi mengingat keterbatasan waktu dan sumber daya, Anda mungkin hanya akan mempelajari apa yang sebenarnya perlu Anda gunakan, dan itu tergantung pada komunitas tempat Anda bekerja.

Geoff Oxberry
sumber
Jadi sejauh menyangkut akademisi, akankah Anda mengatakan lebih baik menginvestasikan waktu untuk belajar Python daripada C ++?
AlanH
1
Sekali lagi, itu semua tergantung. Saya masih lebih di sisi akademis, dan saya menggunakan Python sepanjang waktu. Saya juga masih harus menggunakan C ++ untuk pekerjaan yang ditulis dalam bahasa itu. Pendapat pribadi saya adalah bahwa mempelajari Python terlebih dahulu mungkin akan membayar lebih cepat untuk Anda daripada jika Anda mempelajari C ++ terlebih dahulu, tapi saya tidak tahu apa yang digunakan probabilis / proses stokastik / kombinatorik yang digunakan orang, sehingga jarak tempuh Anda dapat bervariasi.
Geoff Oxberry
Saya setuju dengan Geoff bahwa mempelajari python terlebih dahulu adalah ide yang bagus, karena akan membuat Anda lebih cepat. C ++ adalah bahasa yang baik, tetapi kurva belajarnya secara signifikan lebih tinggi dan mempelajarinya dengan setengah hati lebih buruk daripada tidak mempelajarinya sama sekali.
LKlevin
"C ++ memiliki kurva belajar yang curam ketika datang ke fitur-fitur canggihnya, dan saya telah mendengar laporan anekdotal dari orang yang membutuhkan waktu bertahun-tahun untuk merasa seperti mereka telah mempelajari bahasa lengkapnya". Ya saya sangat setuju. Saya berpikir bahwa setiap programmer yang bernilai garam harus belajar c / c ++ beberapa waktu dalam hidupnya, tetapi pasti akan membawa Anda 10.000 jam untuk benar-benar merasa seperti seorang ahli dengan mereka. +1
James
11

Seperti yang ditunjukkan Misha dan Geoff Oxberry, Mathematica benar-benar memiliki fokus yang berbeda (hanya karena Anda dapat menggebuk kuku dengan obeng bukan berarti Anda harus melakukannya). Jadi saya menganggap pertanyaan Anda sebagai "Jika saya tahu Matlab, mengapa saya harus belajar Python?" [Sunting: dan, ternyata, apakah Anda.]

Untuk semua maksud dan tujuan, Matlab adalah bahasa Inggris dari komputasi ilmiah - dengan semua konotasi positif dan negatif yang dianalogikan oleh analogi ini. Satu poin bagus spesifik adalah bahwa kode Matlab mungkin berguna (yaitu, dapat dieksekusi dan juga dapat dipahami) untuk lebih banyak orang daripada kode dalam bahasa lain. (Ini adalah alasan utama saya memberikan kode Matlab untuk semua algoritme saya.) Juga, desktop Matlab dapat sangat berguna saat membuat prototipe, terutama kemampuan untuk menjalankan bit kode (sel) langsung dari editor, serta di profiler.

Yang sedang berkata, jika Anda ingin belajar bahasa tingkat tinggi lain untuk kesenangan dan keuntungan, Anda bisa melakukan lebih buruk daripada Python. Beberapa alasan selain dari yang disebutkan Geoff:

  • Jauh lebih mudah untuk berinteraksi dengan program eksternal dan pustaka dengan Python. Tidak ada lagi file mex!

  • Jika Anda jauh dari desktop, jauh lebih mudah untuk menjalankan dan menjalankan Python + NumPy / SciPy daripada mendapatkan akses ke lisensi Matlab.

  • Alasan utama Matlab lebih cepat dari NumPy adalah karena ia membundel perpustakaan pustaka yang dioptimalkan untuk aljabar linier (MKL, ACML). Dimungkinkan ( jika agak membosankan ) untuk membangun NumPy Anda sendiri dan menautkannya ke perpustakaan yang sama untuk mendapatkan kinerja yang hampir sama (dan multithreading) seperti Matlab untuk aljabar linier, ditambah kinerja Python yang lebih baik untuk yang lainnya. (Meskipun itu tentu saja memerlukan lisensi bahkan untuk penggunaan akademis, sehingga meniadakan bonus perangkat lunak gratis, masih merupakan opsi yang menarik untuk memiliki kode yang sama bekerja pada instalasi dipercepat yang disponsori majikan di kantor serta di luar rak instal di mesin atau notebook rumah Anda.)

  • Sementara kotak alat Matlab adalah salah satu nilai jualnya, ada beberapa area di mana Python berada jauh di depan; khususnya, SymPy dan FEniCS mengalahkan kotak alat Simbolik dan PDE dengan selisih yang lebar.

  • Jangan lupa bagian yang menyenangkan (ruang putih semantik dan pengikatan nama ): Saya telah melihat beberapa rekan digigit oleh bug Python, dan benar-benar ada sesuatu yang aneh memuaskan dalam menulis algoritma Anda di Python yang tidak ada di Matlab ( meskipun itu mungkin hanya kesenangan belajar bahasa asing) :)

(Jika Anda memulai dengan NumPy, Anda mungkin menemukan halaman ini bermanfaat.)

Christian Clason
sumber
5

Python bisa menjadi pengganti c ++ dan Matlab. Ini tersebar dengan baik di dunia akademis dan industri. Dalam industri kadang-kadang digunakan sebagai lem untuk bahasa tingkat yang lebih rendah, kebanyakan c / c ++. Mathematica benar-benar cerita lain. Keuntungan utamanya adalah di mana semua yang disebutkan lainnya (c / c ++; Matlab; Python) tidak baik: dalam perhitungan simbolik.

Jadi, keempatnya sangat berbeda: c ++ sudah lama dan stabil bahasa pemrograman tingkat rendah; Python adalah bahasa komputer tingkat tinggi yang baru dan berkembang; Matlab adalah lingkungan komputasi numerik dengan aksen yang kuat pada aljabar vektor (meskipun ia mampu melakukan lebih atau kurang semuanya); Mathematica adalah sistem aljabar komputer dengan aksen yang kuat pada perhitungan simbolik (ucapan yang sama dengan matlab). Jadi, mereka bukan pesaing.

Misha
sumber
Memang; Saya sering bingung (dan terkadang kagum) ketika saya melihat orang menggunakan Mathematica untuk komputasi ilmiah ...
Christian Clason
@ChristianClason dan Misha: ini adalah kesalahpahaman bahwa Mathematica terutama merupakan sistem aljabar komputer. Jika Anda melihat bagaimana orang benar-benar menggunakannya , sebagian besar itu bukan aljabar simbolis, dan dalam beberapa bidang numerik itu bersaing dengan alat-alat seperti MATLAB dan R. (Secara pribadi saya akan memilih Mma daripada dua lainnya ini untuk sebagian besar tugas pemrosesan data numerik , tapi tentu saja itu adalah preferensi pribadi.) Di beberapa daerah, seperti integrasi numerik atau visualisasi, tampaknya ada di depan MATLAB. Dalam kasus lain seperti PDE, pemecahannya jauh di belakang.
Szabolcs
Untuk seseorang yang hanya tertarik pada komputasi numerik, Python adalah alternatif untuk MATLAB yang merupakan bahasa tingkat tinggi yang serupa dalam kemampuannya untuk memanfaatkan rutinitas perpustakaan untuk menangani perhitungan standar yang melibatkan aljabar linier, transformasi Fourier, fungsi khusus, dll. Ya, Python jauh lebih luas berlaku, tetapi tidak mencakup semua yang mungkin Anda lakukan di MATLAB.
Brian Borchers
4

Saya tahu pertanyaan Anda adalah tentang penggunaan python, tetapi Anda mengatakan bahwa Anda tertarik pada "analisis numerik atau probabilitas." Saya tidak tahu apakah Anda telah mempertimbangkan R , tetapi dirancang khusus untuk jenis pekerjaan ini. R adalah bahasa yang sangat kuat untuk probabilitas dan statistik, dan memiliki basis pengguna matematika dan ilmuwan yang sangat besar dan aktif.

R berbeda dari Matlab dalam arti bahwa itu open-source, memiliki fokus statistik, dan membuat beberapa plot yang sangat mengesankan (lihat ggplot2 ). Anda dapat melakukan hampir semua hal dalam R yang dapat Anda lakukan di Matlab, tetapi aspek favorit saya adalah kontribusi pengguna. Sebagian besar perpustakaan yang disumbangkan ditulis oleh para ilmuwan dan diterbitkan dalam jurnal statistik. Mereka juga memiliki panduan tertulis yang sangat baik (disebut referensi dan sketsa). Perpustakaan favorit saya yang baru memberikan dukungan CUDA yang dibangun di perpustakaan CULA (gratis untuk penggunaan akademis). Ada sejumlah besar metode untuk teori probabilitas juga (lihat di sini ).

Lagi pula, R sudah pasti dirancang khusus untuk pekerjaan Anda, jadi periksa dan pertimbangkan untuk menambahkannya ke perangkat Anda :) Ingat, Anda dapat menjalankan skrip R dalam Python, dan skrip Python dalam R, dan dengan mudah menangkap output.

Semoga berhasil!

D.Deriso
sumber
2

Yang lain sudah berkomentar panjang lebar dan lebih dalam daripada yang akan saya coba di sini. Namun, saya ingin menyoroti satu hal lagi: itu tergantung pada komunitas Anda. Misalnya, jika Anda mengerjakan proyek teknik listrik, kemungkinan Anda akan menggunakan matlab; hal yang sama mungkin benar jika Anda seorang analis numerik yang ingin memverifikasi perkiraan tingkat konvergensi Anda pada masalah model sederhana.

Di sisi lain, jika Anda menyukai komputasi ilmiah (misalnya, mensimulasikan aliran di sekitar airfoil, mensimulasikan fusi nuklir dalam plasma, mensimulasikan konveksi dalam mantel bumi) atau mengembangkan metode numerik dengan aplikasi seperti itu dalam pikiran, maka bahasa franca adalah C ++. Setiap paket komputasi ilmiah skala besar saat ini ditulis dalam C ++ (atau C), untuk lebih baik atau lebih buruk, dan ini adalah bagaimana itu akan tetap untuk waktu yang lama untuk datang. Untuk menyebutkan beberapa contoh saja, PETSc dan paket-paket Trilinos yang sangat besar dan beragam ditulis masing-masing dalam C dan C ++. Di antara pustaka elemen hingga open source yang luas yang dapat saya pikirkan (libMesh, deal.II, oofem, freefem) setiap satu ditulis dalam C ++. Di antara program visualisasi, dua yang terbesar (Visit dan Paraview) ditulis dalam C ++. Saya dapat memperpanjang daftar.

Intinya adalah bahwa jika Anda puas dengan simulasi skala kecil, orang menggunakan satu bahasa, tetapi setiap kali datang ke komputasi yang serius, mungkin paralel, mereka semua menggunakan sesuatu yang lain. Ini adalah hal komunitas pasti, tetapi juga dengan menjadi interoperable - jika PETSc dan Trilinos ditulis dalam C dan C ++, maka saya (menjadi penulis kesepakatan. II) tidak dapat dengan mudah memilih bahasa lain bahkan jika saya ingin karena Saya perlu bekerja dengan PETSc dan Trilinos.

Wolfgang Bangerth
sumber
1
Agar adil, ada banyak pengguna PETSc yang datang dari Fortran, dan beberapa dari Python. C mudah dipanggil dari hampir semua bahasa, meskipun pemrograman bahasa campuran dilengkapi dengan tantangannya sendiri dan saya jarang merekomendasikannya. Masalah di mana dalam tumpukan kode Anda berada juga terlalu sering diabaikan. Aplikasi pengguna akhir harus membuat pilihan desain perangkat lunak yang berbeda dari pustaka tingkat sistem, misalnya.
Jed Brown
Itu adil. Namun demikian benar bahwa contoh yang lebih baru dari perangkat lunak yang digunakan dalam perhitungan skala besar sangat banyak ditulis dalam C dan C ++ hari ini (ketidaksepakatan yang lebih tua ditulis dalam Fortran meskipun).
Wolfgang Bangerth
1

Untuk menambah dua sen saya, saya memiliki pengalaman akademis baru-baru ini (lulusan PhD baru :)) dan pengalaman industri (produsen peralatan survei).

Kami melakukan banyak perhitungan numerik pada prosesor tertanam yang lemah (pikirkan prosesor ponsel). Selain tidak ada MATLAB untuk ARM, C ++ adalah raja di dunia ini - banyak suite kompiler tertanam tidak menyertakan FORTAN!

Meskipun kami memiliki jumlah lisensi MATLAB yang terbatas, persyaratan untuk membuat produk yang menarik daya 2 Watt membuat pekerjaan pengembangan kami lebih menyukai C ++, (bereksperimen ke samping).

Damien
sumber