MATLAB, Julia ve Python'un kapsamlı karşılaştırması, kim bilimsel hesaplamada daha iyi?

Yüzlerce programlama dilinin kendi avantajları ve dezavantajları vardır ve her birinin kendi en uygulanabilir senaryoları vardır. Öyleyse bilimsel hesaplama açısından, ana akım MATLAB, Julia ve Python'un en benzersiz avantajları nelerdir? Geliştiricileri güçsüz kılan kusurlar nelerdir? Bu makalede, çeşitli bilimsel hesaplama senaryolarında en iyi programlama dilini keşfetmek için üçünün kapsamlı bir karşılaştırmasını ve analizini yapacağız.

Yazar | Toby Driscoll

Çevirmen | Huai Xu, Baş Editör | Tu Min

Üretildi | CSDN ( İD: CSDNhaberler)

Aşağıdaki çeviridir:

25 yılı aşkın süredir MATLAB kullanıyorum. (Bundan önce, denemeye değmeyen geç aşama bir dal olan MATRIXx'i ya da belki bir hile bile kullandım.) Bu programlamayı öğrendiğim ilk dil değil ama onunla matematiksel yöntemler çağına girdim ve MATLAB'ı anladım. Kariyerim çok faydalı oldu.

Bununla birlikte, Python'un yükselişi bilimsel hesaplamada göz ardı edilemez. MathWorks aynı duyguya sahip olmalıdır: Python'u doğrudan MATLAB'da çağırma yeteneğini arttırmakla kalmaz, aynı zamanda ikili operatör işlemlerinin daha aktif yayını gibi bazı dil özelliklerini de benimser.

Bu, araştırma ve öğretimde MATLAB'ı kullanmaya devam ettiğimi sorguladığım noktaya ulaştı. Benim için çoğu kolay olmasına ve içine çok fazla enerji harcamama rağmen, gerçekten yeni şeyler öğrenme cesaretini toplamak zor.

MATLAB'a dayalı bir ders kitabı yazdım (giriş niteliğinde hesaplama matematiği için referans kitap olarak kullanılabilir). Bu kitap 40'tan fazla fonksiyona ve 160 hesaplama örneğine sahiptir.MATLAB'daki sayısal bilimsel hesaplamaların kapsamlı temelini kapsar. Kısmen kendini geliştirmek ve kısmen de bu kitabın kullanışlılığını artırmak için. Bu yıl kodu Julia ve Python'a çevirmeye başladım. Bu deneyim bana, aşağıda tartışmaya çalıştığım üç bilimsel hesaplama dili hakkında özel bir görüş sağladı.

Esas olarak maliyet ve açıklık konularını tartışacağım. Python ve Julia'nın aksine, MATLAB'ın ne bira özgürlüğü ne de konuşma özgürlüğü vardır. Bazı insanlar için bu gerçekten çok büyük bir fark, belirleyici bir fark - ancak teknik avantajları dikkate almak istiyorum. Yıllar geçtikçe, MATLAB diğer tüm ücretsiz ürünleri çok faydalı yollardan çok geride bıraktı.İş verimliliğini artırmak istiyorsanız, maliyet zarar görecektir. Bu, dil ideallerinin ve dil ekolojisinin ayrı bir değerlendirmesidir.

Maliyetleri bir kenara koyduğunuzda, bu diller arasındaki birçok farklılığın yararlı çerçevesi kökenlerinde yatmaktadır. MATLAB, matematiğe, özellikle sayı odaklı matematiğe öncelik veren ilk girişimdi. Python 1980'lerin sonunda ciddi olmaya başladı ve bilgisayar bilimine odaklandı. Julia, 2009'dan beri bu yönlerden daha fazla denge arıyor.

MATLAB

Başlangıçta, MATLAB'daki her değer bir çift duyarlıklı kayan nokta sayıları dizisiydi. Bu seçimin iki yönü, diziler ve kayan nokta sayıları tasarım kararlarından esinlenmiştir.

Kayan noktalı sayılar için IEEE 754 standardı 1985 yılına kadar kabul edilmedi ve bellek G yerine K cinsinden ölçülür. Kayan nokta çift kesinliği, karakterleri veya tam sayıları temsil etmenin en verimli yolu değildir, ancak bilim adamları, mühendisler ve daha fazla matematikçinin çoğu zaman kullanmak istediği şeydir. Ek olarak, değişkenleri bildirmeye veya açıkça belleği ayırmaya gerek yoktur. Bilgisayarın bu görevleri halletmesine izin verin ve veri türlerini bir kenara bırakarak beyninizi veriler üzerinde çalışan algoritmalar hakkında düşünmek için özgür bırakın.

Diziler önemlidir çünkü doğrusal cebirdeki sayısal algoritmalar LINPACK ve EISPACK biçiminde kendi dizilerinde görünmektedir. Ancak bilimsel hesaplamada standart taşıyıcı olan FORTRAN 77, değişken bildirimi, örtük olarak adlandırılmış programları çağırmayı, kod derlemeyi ve ardından veri ve çıktı dosyalarını kontrol etmeyi içeren çok adımlı bir süreçtir. Matris çarpımını A * B olarak yazın ve cevabı hemen yazdırın, oyunun kurallarını değiştirir.

MATLAB ayrıca grafikleri basit ve erişimi kolay hale getirir. Karmaşık bir makineye özgü düşük seviyeli arama kütüphanesi yoktur, sadece arsa (x, y) ve MATLAB kullanan diğer herkesin ne göreceğini neredeyse görebilirsiniz. MATLAB ayrıca karmaşık sayılar, seyrek matrisler, platformlar arası grafik kullanıcı arayüzleri oluşturmak için araçlar ve MATLAB'ı düşünme hızında bilimsel hesaplama için bir yer haline getiren bir dizi önde gelen ODE çözücü paketi gibi birçok yeniliğe sahiptir.

Bununla birlikte, etkileşimli bilgi işlem için ideal tasarım, uzun hesaplamalar için bile, her zaman iyi yüksek performanslı yazılımların yazılmasına yardımcı olmaz. Verilerin birçok işlev arasında taşınması, çok sayıda değişkenin işlenmesini gerektirir ve sık sık giriş ve çıkış parametreleri hakkındaki belgelere başvurur. Düz isim alanındaki her disk dosyasının işlevi, küçük bir proje için çok basittir, ancak büyük bir proje için bir baş ağrısıdır. Hız darboğazlarından kaçınmak istiyorsanız, belirli programlama kalıplarını (vektörleştirme, bellek ön tahsis) uygulamanız gerekir. Bilimsel hesaplama, artık çok sayıda farklı yerel veri türü ile daha fazla alanda kullanılmaktadır. ve daha fazlası.

MathWorks, MATLAB'de yenilik yapmaya devam ederek yanıt verdi: satır içi fonksiyonlar, iç içe geçmiş fonksiyonlar, değişken kapanışlar, çoklu veri türleri, nesne yönelimli özellikler, birim test çerçeveleri ve daha fazlası. Her yenilik, önemli bir soruna çözüm olabilir. Ancak 40 yıllık değişimin birikimi, sadelik ve birlik kavramlarını yok etme yan etkisine sahip oldu. 2009'da 100 sayfadan daha kısa sürede MATLAB'ın temel içeriğini bence ele alan bir kitap yazdım. Bildiğim kadarıyla, bunların hepsi hala mevcut, ancak şimdi kendinizi yetkin olarak adlandırmak için daha fazlasını bilmeniz gerekiyor.

Python

Bir bakıma, Python'un geçmişi neredeyse MATLAB'ın aynasıdır. Her ikisinin de etkileşimli komut satırları vardır (artık yaygın olarak REPL veya "real-eval-print döngüsü" olarak bilinir) ve değişken bildirimlere tabi değildir ve Derleme kısıtlamaları. Ancak MATLAB, sayısal analistler için bir oyun alanı olarak yaratıldı, Python ise hackerlar düşünülerek oluşturuldu. Daha sonra revizyon ve genişletme yoluyla, her biri diğer kitlelere dönüşür.

Bence Python hala matematiksel çekiciliğe sahip değil. Matris çarpımı için ^ ve @'yi ** ile değiştirmek (yeni bir yenilik), matris boyutu yerine bir şekil, satır odaklı depolama vb. Gibi bazı gariplikleriniz ve küçük sıkıntılarınız var. Eğer düşünürsen

V.conj.T @ D ** 3 @ V, V D3V yazmanın zarif bir yoludur, o zaman bir doktora görünmeniz gerekebilir. Bir de sıfır indeksi vardır (yani, 1'den başlayan bir indeksin tersi). Bu argümanları okudum ve kesin olmadıklarını düşünüyorum. Açıkçası bu bir tercih meselesidir - çevrimiçi cihadın içeriği - çünkü herhangi bir anlaşmayı örneklemek için beceriksiz örnekler verebilirsiniz. Belirleyici bulduğum şey, vektörleri ve matrisleri indeksleyen onlarca yıllık matematiksel uygulamamız var ve çok sayıda sözde kod bu varsayımı yapıyor.

Bu küçük sıkıntılara ek olarak, Python + NumPy + SciPy ekosisteminin beceriksiz ve tutarsız olduğunu buldum. Dil esas olarak nesne yönelimi için kullanılsa da, bir matris sınıfı vardır, ancak kullanımı önerilmez ve kullanımdan kaldırılmıştır. Belki MATLAB beni düşürdü, ancak matrisin yardımcı olabilecek ve geliştirebilecek çok önemli bir nesne türü olduğunu buldum. Diziler ve matrislerle farklı şeyler yapmak için * kullanabileceğiniz OOP'nin ana satış noktası değil mi? Bu konuda birçok eksiklik var. (Neden spsovle adında bir komuta ihtiyacım var? Seyrek bir matriste çözüm çağıramaz mıyım? Sonra devam edin).

Bana göre bazı yerlerdeki dijital ekosistem biraz zayıf görünüyor. Örneğin, ortogonal ve ODE (Sıradan Diferansiyel Denklem) çözümleri 2019'da minimal bir set gibi görünüyor. AFAICT'in DAE'leri, DDE'leri çözmek için hiçbir yöntemi, semplektik çözümü yoktur ve dahili Krylon yinelemesinin örtük hesaplama yöntemi yoktur. Bu yöntemler için referans materyallere bakın, çoğu 30 Yıllar ya da daha yaşlı - hala iyi, ama yine de tamamlanmaktan uzak. Matplotlib paketi harika bir iş, bir süre için MATLAB'dan daha iyi görünüyordu ama yine de 3D'den yoksun olduğunu gördüm.

Bazı uzmanlar, yürütme hızı açısından Python kodunun derlenmiş dillere ayak uydurmasının zor olmasının derin nedenleri olduğuna inanıyor. haklıyım aramak "Python çok yavaş" sonucundan çok memnunum. Python destekçileri, MATLAB'ın daha önce yaptığı birçok argümanı ve özür diledi. Bu onların yanlış olduğu anlamına gelmez, ama bu sadece bir algı problemi değil.

Python'un bilimsel hesaplama alanındaki birçok insan için neden bu kadar heyecan verici olduğunu anladığımı düşünüyorum. REPL'den elde edilebilecek bazı MATLAB tarzı sözdizimi ve işlevlere sahiptir. Çevresinde, diğer diller ve bilgi işlem alanlarında kullanılabilecek iyi araçlar vardır. Ücretsizdir ve daha uzun vadeli yeniden kullanılabilirliğe sahiptir. Açıkçası, değişmek için herhangi bir nedeni olmayan birçok insan için geçerlidir.

Ancak bilimsel hesaplamada nasıl yapılacağını bildiğim şey için, Python alıştığımdan daha çok öğrenmek ve kullanmak için bir angarya gibi. Henüz tüm toplumu süpürmeye mi devam edeceğini mi yoksa zirveye mi yakın olduğunu bilmiyoruz. Özel bir öngörü yeteneğim yok, ancak geleceğe yönelik düşüşüm var.

Julia

Julia'nın geç kalanların avantajları ve dezavantajları vardır. Julia'nın daha iyisini yapabileceklerini düşünen yaratıcılarını takdir ediyorum:

Ücretsiz lisansa sahip açık kaynak bir dil istiyoruz. C hızına ve Ruby'nin esnekliğine sahip olmayı umuyoruz. Lisp gibi gerçek makrolar ve MATLAB gibi tanıdık matematiksel sembollerle benzer bir dil istiyoruz; Python gibi genel programlama için kullanılabilecek ve R gibi istatistiksel analizde kullanışlı bir dil istiyoruz. Dizeleri Perl gibi doğal olarak işleyen bir dil, MATLAB gibi güçlü doğrusal cebir işlemlerine sahiptir ve programları bir kabuk gibi birbirine yapıştırmada iyidir. Basit ve öğrenmesi kolay, ancak talepkar hackerlar tarafından çekiliyor ve interaktif ve derlenebilir olmasını istiyoruz.

Büyük ölçüde başarıya ulaştıklarına inanıyorum. 1.0 sürümünün sonlarında, REPL'i biraz küçümsüyor gibiydiler ve bir sebepten dolayı yavaşça MATLAB'dan uzaklaştılar. (LinRange, linspace'den daha mı iyidir?) Ancak, bunların hepsi karmaşıklıktır.

ASCII'nin ötesine geçen kullandığım ilk dil bu. gibi değişkenleri ve gibi operatörleri kullanarak, hala makul bir tatmin elde edemiyorum. Bu sadece yüzeysel değil; yazdığımız matematiksel ifadeler gibi görünebilmek, öğretimi ve dokümantasyonu biraz karmaşık hale getirse de gerçek avantajıdır.

Julia ile çalışmak, içsel üstünlükten değil, MATLAB seçiminden dolayı bazı programlama alışkanlıkları geliştirdiğimi hissettiriyor. Vektorizasyon birçok şey için doğal değildir. Julia'da, işlev adına bir nokta eklediğiniz sürece, göz alıcı olan herhangi bir işlevi vektörleştirebileceğinizi keşfettim. Matrisin eğitim yoluyla inşa edilmesi, bunun tersine, iç içe geçmiş döngüyü (veya ağ örgüsü tekniğini) bir vagon kamçısı gibi gösterir ve jeneratör, bir bedel ödemeden yapılmış gibi hissettiren basit bir toplama yapmak için matristen tamamen kaçınır. (Python'un benzer dil özelliklerine sahip olduğunu biliyorum).

Çoklu gönderimin büyük özelliği, bazı şeyleri nesneye yönelik olmaktan daha kolay ve anlaşılır hale getirir.Örneğin, geleneksel nesne yönelimli dillerde Wall ve Ball sınıflarınız varsa, hangi sınıf Ball ve Wall arasındaki çatışmayı tespit eder? Ya da hakem olarak hareket etmek için bir Oda sınıfına mı ihtiyacınız var? Bu tür sorular beni üzüyor. Birden çok gönderimde veriler nesne türüne paketlenir, ancak veriler üzerinde çalışan yöntemler sınıfa bağlı değildir. bu nedenle:

işlev saptama_collision (B :: Top, W :: Duvar)

Türleri anlayın, ancak bağımsız olarak tanımlanırlar.Benim için, çoklu gönderim kavramının genişletilmiş bir dil için ne kadar ilginç ve potansiyel olarak önemli olduğunu anlamak çok fazla programlama gerektirir.

Dijital ekosistem hızla gelişiyor. İlk örneğim, harika Chris Rackauckas tarafından yazılan DifferentialEquations.jl. Yazılım Wilkinson Ödülünü hemen kazanamazsa, sistem çökecektir. Dönüşüme hazırlanmak için web sitesine gitmeniz yeterli.

Julia'nın MATLAB'dan daha yüksek vaat ettiği hız artışını görmedim. Sebebin bir kısmı, göreceli olarak deneyimsiz olmam ve yaptığım görevler, ancak bunun bir kısmı, MathWorks'ün kodu otomatikleştirme konusunda inanılmaz bir iş yapmış olmasıdır. Neyse, çoğu zaman ben değilim Dikkat Kodlama yönü.

Kendimi rahat hissettirmeden önce Julia'da program yapmam biraz zaman aldı (belki de yaşlanıyorum veya katılaşıyorum). Hayal gücümün ötesinde veri türleri hakkında düşünmeme neden oluyor ve her zaman bir şeyi yapmanın doğru yolunu kaçırdığımdan şüpheleniyorum. Ama günlük kullanımda şimdi neredeyse Julia'ya dönüp MATLAB olarak kullanabiliyorum.

Neticede

MATLAB, özellikle mühendislik için uygun bir kurumsal çözümdür. Temel sayısal görevler için öğrenmesi hâlâ en kolay olanı olabilir. On yıllardır katkıda bulunan titiz dokümantasyon ve öğrenme araçları kesinlikle önemlidir.

MATLAB, bilimsel hesaplamada BMW otomobilidir. Pahalıdır ve bu, aksesuarlar (alet kutuları) hakkında konuşmaya başlamadan öncedir. Çok sağlam, istikrarlı bir performans ve hizmet için ödeme yapmanız gerekir. Aynı zamanda orantısız bir nefreti de çekecektir.

Python, Ford'un alıcısıdır. Her yerdedir ve birçok insan tarafından sevilir (Birleşik Devletler'de). İstediğinizi yapabilir ve diğer araçların yapamayacağı şeyleri yapmak için tasarlanmıştır. Zaman zaman ödünç almak isteyebilirsiniz, ancak çok saf bir sürüş deneyimi sağlamaz.

Julia, Tesla'dır. Geleceği değiştirme cesur hedefiyle inşa edilmişti ve belki de olabilir. Bu sadece bir dipnot olabilir ama aynı zamanda istediğinizi elde etmeyi başaracak ve yedek gücünüz olacak.

Ne düşünüyorsun?

@Hprotagonist:

Benim ilgilendiğim kadarıyla, MATLAB benim için büyük çevrilmiş matris dışında tamamen dayanılmaz. Doğrusal cebirin alana özgü bir aracı olarak, onu kesinlikle R'ye tercih ederim, ancak genel amaçlı bir araç olarak, dişlerimi çekme isteği uyandırıyor.

Bakımı kolay, testi kolay ve yeniden düzenlenmesi kolay boru hattı araçları üretmek için tasarlanmamıştır. Hiç böyle olmamıştır. "Basit ve açık dizi ve yol işlemleri" gibi temel şeyleri halledebilir. En iyi ihtimalle, C'nin garip bir taklididir. , Fortan, Java ve diğer diller, bu özellikler eklendiğinde tüm öfke duyacaktır.

MATLAB'ın teknik içeriğinden aşağı yukarı rahatsız oluyorum. (Bir dizine dayanabilirim):

boyut() ans =

Bu tamamen yanlış ve uyuşukluk doğru:

Np.array'de (). Shape Out (1,)

Python aslında olgunlaşmış bir bilimsel yığına sahip genel amaçlı bir dildir.Bunu kullanan sayısal hesaplamalar için kendimi daha güvende hissediyorum, çünkü koduma işaret edecek güçlü bir test paketine ve komut satırı girdisine sahip olabilirim, bu da bana olan güvenimi artırıyor. Kod, güvenle yapılması gerektiğini düşündüğüm şeyi yapıyor ve kullanımı kolaylaştırıyor.

Paketleme aşağı yukarı bir yazı tura atma işlemidir, Python paketleme büyük bir hatadır; matlab mevcut değildir (her bir bağımlılığı kendiniz sağlamalısınız) ve pahalıdır (kullanıcıları kullandıkları alet kutusu için ödeme yapmalıdır ve / Veya MCR'yi kurun ve kodu düzenleyemezsiniz).

Gerektiğinde matlab bakımını yapacağım ama pek sevmiyorum.

@nimrody:

MATLAB ile ilgili sevdiğim bir özellik, işlevlerinin işlevler olmasıdır. Parametreler değere göre aktarılır ve işlevler, parametrelerini değiştiremezler (iyi, ortak olmayabilen nesneler dışında).

İşlev, parametrelerini değiştiremezse, Matlab optimize etmeye ve kopyalamadan kaçınmaya çalışacaktır. Matlab (bazen) yeterince akıllıdır, bu nedenle A = f (A), A'yı kopyalamak yerine uygun yerde değiştirecektir.

Matematik odaklı dil beklentim budur. Mümkünse, bilgi şeffaflığı yanılsamasını koruyun ve dahili olarak optimize edin.

MATLAB ayrıca makul bir JIT derleyicisine, iyi bir hata ayıklayıcıya sahiptir.

Artık MATLAB kullanmıyorum, ancak bilimsel hesaplama (simülasyon, keşif) için çok verimli bir ortam.

@ggcdn:

MATLAB benzersizdir, ancak "bilimsel" kod veya komut dosyalarında hata ayıklamak için daha iyi bir IDE ile hiç karşılaşmadım. Mevcut değeri görüntülemek için fareyi değişkenin üzerine getirerek, bazı "test" kodunu duraklatıp çalıştırabilir veya kodu yeniden yazıp yürütmeye devam edebilirsiniz, bir excel sayfasına benzer bir dizi veya matrisi kolayca düzenleyebilirsiniz.Kodu yazarken görebilirsiniz. Boktan bir matris algoritmasına benzemiyor ... bunlar çok yararlı olduğunu düşündüğüm şeyler. Bazı görevleri tamamlamak daha yavaş veya daha zor olsa da, alanımda (yapısal mühendislik) sadece bu nedenlerle kullanıyorum.

@ohsonice:

Benim görüşüm (Matematik Enstitüsü):

MATLAB birçok nedenden ötürü akademide oldukça kabul görmektedir. Sınıf örnekleri olarak küçük okunabilir senaryolar oluşturmak kolaydır. Hata ayıklama işlevi / IDE'de gezinmek kolaydır. Okul lisans ücretini öder; derleyin veya indir Paketin herhangi bir ek işi yoktur (havalı bir şey yapmak istemediğiniz sürece).

Python'da öğretilen bir ML kursuna girdim. Tüm sayısal analiz ve modelleme kurslarım, örnekler ve ödevler için MATLAB'a güveniyor. Ben (matematik dışında bir programcı olarak) araştırma için Julia'yı seçtim. Şimdi daha fazla teorik araştırma yapıyorum çünkü kodlama ve hesaplamaları karıştırmayı sevmiyorum.

Bir sınıf arkadaşı, FORTRAN platformunda bir PDE çözücü geliştirdi, eğitmen ona önce MATLAB'da çalışmasını ve ardından daha hızlı bir dile geçmesini söyledi.

Orijinal: https://tobydriscoll.net/blog/matlab-vs.-julia-vs.-python/

Bu makale bir CSDN çevirisidir, lütfen yeniden basımın kaynağını belirtin.

Son

"TFBOYS" "News" 190622 "This is Street Dance 2" EP06 Harika İnceleme Yi Yang Qianxi'nin süper tatlı itirafı sinirlendi
önceki
Bir programcı olarak neden açık kaynağı seçmiyorsunuz?
Sonraki
Birleşik Krallık'taki en yaşlı köpeklere bir bakın, hayatın 100 yaşından itibaren çok geç olmadığını kanıtlıyorlar.
OPEC ham petrol pazar payı 17 yılın en düşük seviyesine iniyor! Suudi Arabistan pazar payını ele geçirmek için üretimi artırabilir
190622 Wang Junkai'nin genç görünümünü görmek için İlk Aşk Yüzü İdolü Okul Üniforması Yarışması
"TFBOYS" "Paylaş" 190622 First Love Face Idol Okul Üniforması Yarışması, Wang Junkai'nin genç görünümünü görmek
Bir haftalık yapay zeka etkinlikleri: MIT ve IBM, sinirbilimi keşfetmek için yapay zekayı kullanıyor, Google, yapay zeka tartışmalarına yanıt veriyor
Ödediğinizin karşılığını ödersiniz, TV alırken ucuza açgözlü olmayın
Qingdao Dongjiakou: Geliştirmeyi gururla yazmak için bir kalem sallamak, 5 büyük savaş başlatmak ve yeniden yola çıkmak
Eserlerin açık artırma fiyatı Picasso'yu eziyor Ruhsuz AI ruh ressamının geleceği nedir?
Üç atış onaylandı! Honor 9Xin ilk ID tasarımı, "endüktif X dokusu" tasarımı amiral gemisi
Komik: Kız arkadaşına adaptör modunun ne olduğunu nasıl açıklayabilirim?
Programcılar düşük kodlu ve kodsuz geliştirme arasında seçim yapmalı mı?
Zaobao: İtalyan basını, Bayern'in Sane + Pepe'den 165 milyon euro alacağını söyledi, Inter Milan imzası Barrera
To Top