Yumuşak Soru: Python resme nerede uyuyor?


9

Bu yüzden Python öğrenmeye zahmet etmem gerekip gerekmediğini tartışıyorum. Profesörlerimle konuştuğumdan, Matlab uygulamalı matematik / bilgisayar bilimlerinde akademi söz konusu olduğunda kullanılan ortak dil gibi görünüyor ; ederken sanayi , benim profesör (özellikle. endüstrisinde çalışmış olanlar) söylediler öğrenme c ++ en güvenli yoldur.

Hem akademi hem de endüstride, Python ile bile rahatsız olup olmamam ya da şu an için bildiğim şeyde (MATLAB ve C ++) gerçekten iyi olup olmadığınıza dair duymak istiyorum.

Güncelleme : Geoff iyi bir noktaya değindi, muhtemelen biraz daha detay vermeliyim:

Şu anda geçen yıl bir lisans öğrencisiyim, matematik uzmanlığı ile matematik eğitimi alıyorum. Mezun olunan bir okula devam etmek ve araştırmada kalmak (kendimi öğretmekten zevk aldığını hiç görmedim) ya da laboratuarda çalışmak istiyorum. Her ikisi de idealdir. Hangi araştırma alanlarına gelince, muhtemelen sayısal analiz veya olasılık çizgileri boyunca bir şey. A planı işe yaramazsa, sanayiye hazırlanmak okuldan çok fazla zaman almadığı sürece endüstride çalışmaya açık olurum. Bu yüzden, endüstride yaygın olan dilleri bir yedek olarak öğrenmem gerektiğini düşündüm. Ama bu yüzden çatıştım. Her dili çalışamıyorum veya kendimi her olasılık için hazırlayamıyorum, çünkü bu çok zaman alacaktır.


1
Sorunuz iyi bir soru, ama muhtemelen biraz açık uçlu ve belirsiz. Hangi disiplini inceliyorsunuz ve ne yapmak isteyebileceğinizi düşünüyorsunuz?
Geoff Oxberry

1
MATLAB veya saf C ++ 'da iyi çalışmayan Python ile yapılabilecek şeylere bir örnek için: epubs.siam.org/doi/abs/10.1137/110856976 . (utanmaz öz tanıtım uyarısı)
David Ketcheson

Yanıtlar:


15

Bu tür sorulardan birindeki zorluk, cevabın topluma oldukça bağımlı olmasıdır.

Sorularınızdan bazılarını gelişigüzel sırada cevaplamak için:

MATLAB hem akademide hem de endüstride çok kullanılır. Endüstride biraz kullanılmasının nedenlerinden biri de akademide öğretilmesidir. MATLAB'ın Lincoln Laboratuarında ve DuPont'un araştırma ve geliştirme bölümlerinde kullanıldığını biliyorum.

Python'da yazılmış, sempozyum ve SAGE gibi sembolik hesaplamada iyi olan yazılım paketleri vardır. Özel ilgi alanlarınıza, özellik gereksinimlerine ve kişisel tercihlerinize bağlı olarak, Mathematica (veya Maple veya diğer bilgisayar cebir sistemleri) bu paketlerden daha üstün olabilir.

MATLAB, bazı sembolik hesaplamalar için kullanılabilen bir Sembolik Matematik Araç Kutusu'na sahiptir, ancak benim deneyimime göre sembolik manipülasyon yetenekleri Mathematica ve Python'dan daha zayıftır. Teorik olarak C ++ 'da bazı sembolik manipülasyonlar yapılabilir, ancak bu hantal değildir. MATLAB aynı zamanda iyi bir genel amaçlı dil değildir. Doğrusal cebir ve sayısal matematiği iyi yapar, ancak iyi giriş / çıkış yeteneklerine sahip değildir. C ++ veya Python'a kıyasla iyi paralel yeteneklere sahip değildir (paralel MATLAB, MATLAB Star-P ve Paralel Hesaplama Araç Kutusu gibi varyantlar olsa da). Grafik yetenekleri bile bazı işleri kullanabilir. MATLAB, lisansı olan bir kuruma bağlı olmadığınız sürece de pahalıdır. Her araç kutusunun satın alınması pahalıdır ve genellikle yüzlerce ila binlerce dolar arasında bir maliyete sahiptir.

Mathematica, sembolik hesaplamaya ek olarak sayısal hesaplama yapar. İnsanların sayısal çalışma için Python ve MATLAB kullandıklarını gördüğüm kadarıyla sayısal hesaplama için kullandıklarını görmedim. Paralel yetenekleri de var, ancak büyük süper bilgisayarlara ölçeklenmiyor.

Python, öğrenmesi kolay ve kullanılabilir olarak kabul edilen iyi bir genel amaçlı dildir. Büyük süper bilgisayarlarda kullanılır (örneğin, PyClaw, petsc4py, mpi4py ve diğerleri) ve iyi ölçeklendirilir. Ayrıca saygın paketler (NumPy ve SciPy gibi) vardır; geniş, aktif bir topluluk; iyi giriş / çıkış işleme yetenekleri; ve iyi grafik kütüphaneleri ile birlikte geniş bir kütüphane deposu (PyPI'ye bakın). Yukarıda belirtilen tescilli paketlere kıyasla ücretsizdir. MATLAB veya Mathematica'nın işlevlerinin çoğunu ücretsiz olarak bulunan Python paketlerinde bulabilirsiniz. Python'un ana dezavantajı, C ++ gibi derlenmiş dillerden daha yavaş olma eğilimindedir, ancak bu dezavantaj Cython, Numba ve PyPy'nin sürekli gelişimi ile azalmaktadır; daha yavaş Python kodunu C (veya C ++ veya Fortran) koduyla ve uygun şekilde yazılmış Python sarmalayıcıları ile hafifletilebilir. Yorumlanan birçok kişi, Python ile derlenmiş dillerden daha yüksek verimlilik rapor eder. Oldukça popüler ve zamanınız varsa muhtemelen öğrenmeye değer.

C ++ karmaşık bir dildir ve bilgisayar bilimlerinde kullanımı tartışmalıdır. Geniş özellik seti, bakımı zor olan ve derlenmesi sonsuza kadar süren yazılım yazmayı kolaylaştırabilir. Bununla birlikte, mantıklı bir şekilde kullanıldığında, templating ve operatör aşırı yüklenmesi gibi özellikler, deal.II, Blaze ve Elemental (diğerlerinin yanı sıra) gibi projelerde olduğu gibi büyük bir etki için kullanılabilir. C ++, gelişmiş özellikleri söz konusu olduğunda dik bir öğrenme eğrisine sahiptir ve yıllar süren insanların tam dili öğrendiklerini hisseden anekdot raporları duydum. Bununla birlikte, kullanılabilirlik endişelerine ve karmaşık özellik setine rağmen, aynı zamanda popüler bir dildir. Sadece kendinizi daha istihdam edilebilir kılmak için muhtemelen öğrenmeye değer; hesaplama bilimindeki ana rakipleri de öğrenmeye değer Fortran ve C'dir.

Öğrenmeye karar verdiğiniz her şey, gerçekte neye ihtiyacınız olduğuna bağlı olacaktır. Elbette, hem Python hem de C ++ öğrenmek güzel, ancak zaman ve kaynak kısıtlamaları göz önüne alındığında, muhtemelen sadece gerçekten ne kullanmanız gerektiğini öğreneceksiniz ve bu, çalıştığınız topluluğa bağlı.


Akademi söz konusu olduğunda, C ++ yerine Python öğrenmek için zaman ayırmanın daha iyi olduğunu söyleyebilir misiniz?
AlanH

1
Yine, hepsi bağlıdır. Hala daha çok akademik taraftayım ve her zaman Python kullanıyorum. Yine bu dilde yazılmış işler için C ++ kullanmam gerekiyor. Benim kişisel fikrim, Python'u ilk önce öğrenmenin muhtemelen sizin için C ++ öğrenmiş olmanızdan daha hızlı bir şekilde ödeyeceğidir, ancak insanların olasılıkları / stokastik süreçler / birleştiriciler kullandığını bilmiyorum, bu nedenle kilometreniz değişebilir.
Geoff Oxberry

Geoff ile ilk önce python öğrenmenin iyi bir fikir olduğunu kabul ediyorum, çünkü çok daha hızlı gitmenizi sağlayacak. C ++ iyi bir dildir, ancak öğrenme eğrisi önemli ölçüde daha yüksektir ve onu yarım kalple öğrenmek hiç öğrenmekten daha kötüdür.
LKlevin

"C ++, gelişmiş özellikleri söz konusu olduğunda dik bir öğrenme eğrisine sahiptir ve yıllar süren insanların tam dili öğrendiklerini hisseden anekdot raporları duydum". Evet, daha fazla anlaşamadım. Tuzuna değer herhangi bir programcının hayatında bir süre c / c ++ öğrenmesi gerektiğini düşünüyorum, ancak onlarla bir uzman gibi hissetmek kesinlikle 10000 saat sürecek. +1
James

11

Misha ve Geoff Oxberry'nin işaret ettiği gibi, Mathematica'nın gerçekten farklı bir odağı var (sadece bir tornavidayla çiviye çarpabilmeniz gerektiği anlamına gelmiyor). Sorunuzu "Matlab'ı tanıyorsam, neden Python'u öğrenmeliyim?" [Düzenle: ve görünüşe göre, öyle mi?]

Tüm niyet ve amaçlar için Matlab, bilimsel hesaplamanın İngilizcesi - bu benzetmenin içerdiği tüm olumlu ve olumsuz çağrışımlarla. Belirli bir iyi nokta, Matlab kodunun diğer dillerdeki kodlardan daha fazla insana faydalı (yani yürütülebilir ve anlaşılabilir) olma olasılığıdır. (Bu, tüm algoritmalarım için Matlab kodları sağlamamın ana nedenidir.) Ayrıca, Matlab masaüstü prototipleme sırasında, özellikle de kod parçalarını (hücrelerin) doğrudan düzenleyiciden ve yerleşik profiler.

Bununla birlikte, eğlence ve kâr için başka bir üst düzey dil öğrenmek istiyorsanız, Python'dan daha kötü yapabilirsiniz. Geoff'un listelediklerine ek olarak bazı nedenler:

  • Python'daki harici programlar ve kütüphanelerle arayüz kurmak çok daha kolaydır. Artık mex dosyası yok!

  • Masaüstünüzden uzaksanız, Python + NumPy / SciPy'yi çalıştırmak ve çalıştırmak bir Matlab lisansına erişimden çok daha kolaydır.

  • Matlab'ın NumPy'den daha hızlı olmasının ana nedeni, lineer cebir (MKL, ACML) için optimize edilmiş satıcı kütüphanelerini bir araya getirmesidir. Doğrusal cebir için Matlab ile neredeyse aynı performansı (ve çoklu iş parçacığını) elde etmek için kendi NumPy'nizi oluşturmak ve aynı kütüphanelere bağlamak ( biraz sıkıcıysa) ve ayrıca her şey için Python'un daha iyi performansı elde etmek mümkündür. (Tabii ki akademik kullanım için bile bir lisans gerektirse de, bu nedenle özgür yazılım bonusunu reddediyor olsa da, aynı kodun işyerinde destekli bir hızlandırılmış kurulumda ve aynı zamanda bir rafta çalışmak için hala ilginç bir seçenektir. ev makinenize veya dizüstü bilgisayarınıza yükleyin.)

  • Matlab'ın alet kutuları satış noktalarından biri olsa da, Python'un çok ileride olduğu birkaç alan var; özellikle SymPy ve FEniCS , Symbolic ve PDE araç kutularını geniş bir farkla yendi.

  • Eğlenceli kısmı unutma (semantik boşluk ve isim bağlamaya rağmen): Birkaç arkadaşımın Python hatası tarafından ısırıldığını gördüm ve Matlab'da olmayan Python'da algoritmanızı yazarken garip bir şekilde tatmin edici bir şey var ( Her ne kadar bu sadece yabancı dil öğrenmenin neşesi olabilir) :)

(NumPy ile başlarsanız, bu sayfayı faydalı bulabilirsiniz .)


5

Python, hem c ++ hem de Matlab için değiştirilebilir. Hem akademi hem de endüstride iyi yayılmıştır. Endüstride bazen çoğunlukla c / c ++ olmak üzere daha düşük seviyeli diller için bir yapıştırıcı olarak kullanılır. Mathematica tamamen başka bir hikaye. Başlıca avantajı, bahsedilen tüm diğerlerin (c / c ++; Matlab; Python) iyi olmadığıdır: sembolik hesaplamalarda.

Yani, dördü de tamamen farklı: c ++ eski ve kararlı nispeten düşük seviyeli programlama dilidir; Python yeni ve gelişen üst düzey bir bilgisayar dilidir; Matlab, vektör cebiri üzerinde güçlü bir aksanı olan sayısal bir hesaplama ortamıdır (her şeyi az ya da çok yapabilmesine rağmen); Mathematica, sembolik hesaplamalarda güçlü bir aksanı olan bir bilgisayar cebir sistemidir (matlab ile aynı açıklama). Böylece rakip değillerdir.


Aslında; İnsanların Mathematica'yı bilimsel bilgi işlem için kullandıklarını görünce sık sık şaşkına
dönüyorum

@ChristianClason ve Misha: Mathematica'nın öncelikle bir bilgisayar cebir sistemi olduğu yanlış bir kanıdır. İnsanların gerçekte nasıl kullandıklarına bakarsanız , çoğu sembolik cebir değildir ve birkaç sayısal alanda MATLAB ve R gibi araçlarla rekabet edebilir. (Şahsen, çoğu sayısal veri işleme görevi için bu diğer ikisinden Mma seçerdim , ancak bu elbette kişisel bir tercihtir.) Sayısal entegrasyon veya görselleştirme gibi bazı alanlarda, MATLAB'ın önünde gibi görünüyor. PDE çözme gibi diğerlerinde ise geride kalıyor.
Szabolcs

Tek ilgisi sayısal hesaplamaya ilgi duyan biri için, Python, lineer cebir, Fourier dönüşümleri, özel fonksiyonlar, vb. Evet, Python çok daha geniş çapta uygulanabilir, ancak MATLAB'da yapabileceğiniz her şeyi kapsar.
Brian Borchers

4

Sorunuzun python kullanımı ile ilgili olduğunu biliyorum, ancak "sayısal analiz veya olasılık" ile ilgilendiğinizi söylediniz. R'yi düşünüp düşünmediğinizi bilmiyorum , ancak bu tür işler için özel olarak tasarlanmıştır. R olasılık ve istatistik için çok güçlü bir dildir ve matematikçilerin ve bilim adamlarının çok geniş ve aktif bir kullanıcı tabanına sahiptir.

R, Matlab'dan açık kaynak olması, istatistik odağına sahip olması ve çok etkileyici grafikler oluşturması bakımından farklıdır (bkz. Ggplot2 ). Matlab'de R'de yapabileceğiniz neredeyse her şeyi yapabilirsiniz, ancak en sevdiğim özellik kullanıcı katkısı. Katkıda bulunan kütüphanelerin çoğu bilim adamları tarafından yazılmakta ve istatistiksel bir dergide yayınlanmaktadır. Ayrıca son derece iyi yazılmış kılavuzları vardır (referanslar ve vinyetler denir). Yeni favori kütüphanem CULA kütüphaneleri üzerine kurulmuş CUDA desteği veriyor (akademik kullanım için ücretsiz). Olasılık teorisi için de müthiş miktarda yöntem vardır ( buraya bakınız ).

Her neyse, R kesinlikle çalışma alanınız için özel olarak tasarlanmıştır, bu yüzden onu kontrol edin ve araç setinize eklemeyi düşünün :) Unutmayın, R içindeki P komut dosyalarını ve R içindeki Python komut dosyalarını çalıştırabilir ve çıktıları kolayca yakalayabilirsiniz.

İyi şanslar!


2

Diğerleri zaten burada denediğimden daha uzun ve derinlemesine yorum yaptılar. Ancak, bir noktayı bir kez daha vurgulamak istiyorum: bu sizin topluluğunuza bağlı. Örneğin, bir elektrik mühendisliği projesi üzerinde çalışıyorsanız, matlab kullanmanız muhtemeldir; basit bir model problemi üzerinde yakınsama oranı tahmininizi doğrulamak isteyen sayısal bir analistseniz de aynı şey geçerli olabilir.

Öte yandan, bilimsel bilgi işlem yapmaya uygunsanız (örneğin, bir hava folyosu etrafındaki akışı simüle etmek, bir plazmada nükleer füzyonu simüle etmek, dünya mantosunda konveksiyon simüle etmek) veya bu tür uygulamalar göz önünde bulundurularak sayısal yöntemler geliştirmek istiyorsanız, o zaman lingua franca C ++ 'dır. Her büyük ölçekli bilimsel bilgi işlem paketi bugün daha iyi veya daha kötü olmak üzere C ++ (veya C) dilinde yazılmıştır ve bu şekilde uzun süre kalacaktır. Birkaç örnek vermek gerekirse, PETSc ve inanılmaz derecede büyük ve çeşitli Trilinos paketleri sırasıyla C ve C ++ 'da yazılmıştır. Düşünebildiğim büyük açık kaynaklı sonlu eleman kütüphaneleri arasında (libMesh, deal.II, oofem, freefem) her biri C ++ ile yazılmıştır. Görselleştirme programları arasında en büyük iki program (Visit and Paraview) C ++ ile yazılmıştır. Listeyi uzatabilirim.

Mesele şu ki, eğer küçük ölçekli simülasyonlardan memnunsanız, insanlar bir dil kullanırlar, ancak ciddi, belki paralel hesaplamalara gelince, hepsi başka bir şey kullanırlar. Bu kesinlikle bir topluluk işi, ama aynı zamanda birlikte çalışabilirlikle de - PETSc ve Trilinos C ve C ++ ile yazılmışsa, o zaman ben (deal.II'nin yazarı olmak) istesem bile kolayca başka bir dil seçemiyorum çünkü PETSc ve Trilinos ile çalışmam gerekiyor.


1
Adil olmak gerekirse, Fortran'dan gelen birçok PETSc kullanıcısı ve Python'dan çok azı var. C'yi neredeyse her dilden aramak kolaydır, ancak karışık dil programlama kendi zorluklarıyla birlikte gelir ve bunu çok sık önermiyorum. Kodunuzun yığının neresinde olduğu sorunu da sıklıkla göz ardı edilir. Son kullanıcı uygulamaları , örneğin sistem düzeyindeki kitaplıklardan farklı yazılım tasarım seçimleri yapmalıdır .
Jed Brown

Bu adil. Ancak yine de, büyük ölçekli hesaplamalarda kullanılan daha yeni yazılım örneklerinin bu günlerde ağırlıklı olarak C ve C ++ 'da yazıldığı doğrudur (buna rağmen Fortran'da yazılmış daha eski çıkmalar).
Wolfgang Bangerth

1

İki sentimi eklemek için hem yeni akademik deneyime (yeni bir doktora derecesi :)) hem de endüstri deneyimine (anket ekipmanı üreticisi) sahip oldum.

Zayıf gömülü işlemciler üzerinde çok sayıda sayısal hesaplama yapıyoruz (düşünün cep telefonu işlemcileri). ARM için MATLAB olmasının yanı sıra, C ++ bu dünyada kraldır - birçok gömülü derleyici süiti FORTAN'ı içermez!

Sınırlı sayıda MATLAB lisansımız olmasına rağmen, 2 Watt güç çeken bir ürün yapma gereksinimi, geliştirme çalışmalarımızı C ++ lehine çevirir (bir kenara deneme).

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.