Bilimsel hesaplama için en iyi diller [kapalı]


10

Çoğu dilde bazı bilimsel bilgi işlem kütüphaneleri var gibi görünüyor.

  • Python var Scipy
  • Rust vardır SciRust
  • C++ViennaCLve dahil birkaç varArmadillo
  • Javasahiptir Java Numericsve Coltdiğer birçok yanı sıra

Bilimsel hesaplama için açıkça tasarlanmış Rve Juliatasarlanmış dillerden bahsetmiyorum .

Pek çok seçenekle bir görev için en iyi dili nasıl seçersiniz? Ayrıca hangi diller en çok performans gösterecek? Pythonve Ruzayda en fazla çekişe sahip gibi görünüyor, ama mantıklı bir şekilde derlenmiş bir dil daha iyi bir seçim gibi görünüyor. Ve herhangi bir şey daha iyi performans gösterecek Fortranmi? Ek olarak derlenen diller GPU hızlandırmaya eğilimlidir, yorumlanan diller ise beğenir Rve sevmez Python. Bir dil seçerken nelere dikkat etmeliyim ve hangi diller en iyi fayda ve performans dengesini sağlar? Ayrıca kaçırdığım önemli bilimsel bilgi işlem kaynaklarına sahip herhangi bir dil var mı?

efficiency  statistics  tools  knowledge-base  machine-learning  neural-network  deep-learning  optimization  hyperparameter  machine-learning  time-series  categorical-data  logistic-regression  python  visualization  bigdata  efficiency  classification  binary  svm  random-forest  logistic-regression  data-mining  sql  experiments  bigdata  efficiency  performance  scalability  distributed  bigdata  nlp  statistics  education  knowledge-base  definitions  machine-learning  recommender-system  evaluation  efficiency  algorithms  parameter  efficiency  scalability  sql  statistics  visualization  knowledge-base  education  machine-learning  r  python  r  text-mining  sentiment-analysis  machine-learning  machine-learning  python  neural-network  statistics  reference-request  machine-learning  data-mining  python  classification  data-mining  bigdata  usecase  apache-hadoop  map-reduce  aws  education  feature-selection  machine-learning  machine-learning  sports  data-formats  hierarchical-data-format  bigdata  apache-hadoop  bigdata  apache-hadoop  python  visualization  knowledge-base  classification  confusion-matrix  accuracy  bigdata  apache-hadoop  bigdata  efficiency  apache-hadoop  distributed  machine-translation  nlp  metadata  data-cleaning  text-mining  python  pandas  machine-learning  python  pandas  scikit-learn  bigdata  machine-learning  databases  clustering  data-mining  recommender-system 

12
Burada soru yok. Programlama dili ile ilgili temel araştırmalar yapmanız gerekiyorsa, Wikipedia'yı okumaktan hobisini atlatmak için birinin buraya gelmesini beklemekten daha iyidir.
Dirk Eddelbuettel

@DirkEddelbuettel Çok iyi bir nokta. İçerik üretmeyi denemenin Beta'nın bu noktasında rafine edilmekten daha iyi olduğunu düşündüm, ancak SE betaları hakkında çok fazla şey bilmiyorum. Bu benim açımdan iyi bir hamle miydi?
indico

1
Bak bu sayıların.
Emre

@DirkEddelbuettel yanlış değilsiniz, ancak umarım çeşitli dillerle ilişkili yararlı özellikler ve araçlar hakkında bir tartışma başlatmaktı. Kullandığınız dil veri biliminde önemli bir araçtır, bu yüzden benim düşüncem insanların tercih ettikleri araçları tartışabilmeleri ve burada benzer işler yapmak isteyenler için bir kaynak olarak nesnel faydalar olabilmesiydi.
ragingSloth

1
@indico Rastgele seçtiğim ilk kişi olan cran.r-project.org/web/packages/overlap/index.html dosyasını deneyin . Ama gerçekten, R paketleri yazan birçok istatistikçiyi şahsen tanıyorum. Bunlardan biri henüz bir piton yazmamış. Konuşmayı biraz genişletmek için kdnuggets.com/2013/08/… ilginçtir.
Lembik

Yanıtlar:


12

Bu oldukça büyük bir soru, bu yüzden bu tam bir cevap olarak tasarlanmamıştır, ancak umarım bu, veri bilimi söz konusu olduğunda iş için en iyi aracı belirleme konusunda genel uygulamayı bilgilendirmeye yardımcı olabilir. Genel olarak, bu alandaki herhangi bir araç söz konusu olduğunda aradığım nispeten kısa bir nitelikler listem var. Belirli bir sırayla bunlar:

  • Performans : Temel olarak, dilin matris çarpımını ne kadar hızlı yaptığına bağlıdır, çünkü bu veri bilimindeki aşağı yukarı en önemli görevdir.
  • Ölçeklenebilirlik : En azından benim için bu, dağıtılmış bir sistem oluşturmanın kolaylığına geliyor. Burası dillerin Juliagerçekten parladığı bir yer.
  • Topluluk : Herhangi bir dilde, kullandığınız aracı kullanarak takıldığınızda size yardımcı olabilecek etkin bir topluluk arıyorsunuz. Burası pythondiğer dillerin çok ötesine geçiyor.
  • Esneklik : Hiçbir şey kullandığınız dil ile sınırlı olmaktan daha kötü değildir. Çok sık gerçekleşmez, ancak grafik yapıları temsil etmeye çalışmak haskellkötü bir acıdır ve Juliaböyle genç bir dil olmasının bir sonucu olarak çok sayıda kod mimarisi sancısı ile doludur.
  • Kullanım Kolaylığı : Daha büyük bir ortamda bir şey kullanmak istiyorsanız, kurulumun basit olduğundan ve otomatikleştirilebildiğinden emin olmak istersiniz. Yarım düzine makinede titiz bir yapı kurmaktan daha kötü bir şey yoktur.

Performans ve ölçeklenebilirlik hakkında bir ton makale var, ancak genel olarak diller arasında 5-10x'lik bir performans farkına bakacaksınız, bu da özel uygulamanıza bağlı olabilir veya olmayabilir. GPU hızlandırması gittikçe, cudamatonunla çalışmanın gerçekten sorunsuz bir yoludur pythonve cudagenel olarak kütüphane GPU hızlandırmasını eskisinden çok daha erişilebilir hale getirdi.

Hem topluluk hem de esneklik için kullandığım iki birincil ölçüm, dilin paket yöneticisine ve SO gibi bir sitedeki dil sorularına bakmaktır. Çok sayıda yüksek kaliteli soru ve cevap varsa, topluluğun aktif olması iyi bir işarettir. Paket sayısı ve bu paketlerdeki genel etkinlik de bu metrik için iyi bir proxy olabilir.

Kullanım kolaylığı söz konusu olduğunda, aslında bilmenin tek yolunun aslında kendiniz kurmak olduğuna inanıyorum. Birçok Veri Bilimi aracının etrafında çok fazla batıl inanç vardır, özellikle de veritabanları ve dağıtılmış bilgi işlem mimarisi gibi şeyler, ancak bir şeyin sadece kendiniz oluşturmadan kurulumu ve dağıtımı kolay veya zor olup olmadığını gerçekten bilmenin bir yolu yoktur.


Bu cevaba eklemek için: ölçeklenebilirlik açısından Scalave Gobahsetmeye değer.
Marc Claesen

Ben eklersiniz netlik ve kısalığını (sadece o değil sözdizimi ve dil mimarisi ile ilgili). Hızlı yazabilmek ve acı çekmeden okuyabilmek büyük bir fark yaratır (programcıların zamanı makine zamanından daha pahalıdır).
Piotr Migdal

5

En iyi dil ne yapmak istediğinize bağlıdır. İlk açıklama: Kendinizi bir dil ile sınırlamayın. Yeni bir dil öğrenmek her zaman iyi bir şeydir, ancak bir noktada seçmeniz gerekecektir. Dilin sunduğu imkanlar göz önünde bulundurulması gereken açık bir konudur, ancak bence aşağıdakiler daha önemlidir:

  • mevcut kütüphaneler : Her şeyi sıfırdan uygulamak zorunda mısınız yoksa mevcut olanları yeniden kullanabilir misiniz? Bu arayüzlerin, kolayca arayüz kurabildiğiniz sürece, düşündüğünüz herhangi bir dilde olması gerekmediğini unutmayın. Kütüphane erişimi olmayan bir dilde çalışmak, işlerinizi halletmenize yardımcı olmaz.
  • uzman sayısı : harici geliştiriciler istiyorsanız veya bir ekipte çalışmaya başlarsanız, kaç kişinin dili bildiğini düşünmeniz gerekir. Aşırı bir örnek olarak: Brainfuck'ta çalışmaya karar verirseniz, beğenirsiniz, muhtemelen yalnız çalışacağınızı bilin. SO'da dil başına soru sayısı da dahil olmak üzere, dillerin popülaritesini değerlendirmeye yardımcı olabilecek birçok anket bulunmaktadır.
  • toolchain : iyi hata ayıklayıcılara, profilerlere, dokümantasyon araçlarına ve (eğer böyle iseniz) IDE'lere erişiminiz var mı?

Puanlarımın çoğunun yerleşik dilleri desteklediğinin farkındayım. Bu, 'bir şeyleri halletme' perspektifinden.

Bununla birlikte, kişisel olarak düşük seviyeli bir dilde ve yüksek seviyeli bir dilde yetkin olmanın çok daha iyi olduğuna inanıyorum:

  • düşük seviye: C ++, C, Fortran, ... kullanarak, sadece gerektiğinde belirli profilleme sıcak noktalarını uygulayabilirsiniz , çünkü bu dillerde gelişmek genellikle daha yavaştır (bu tartışmaya açık olsa da). Bu diller, kritik performans açısından tepenin kralı olmaya devam etmektedir ve uzun süre zirvede kalmaları muhtemeldir.
  • yüksek seviye: Python, R, Clojure, ... şeyleri birbirine 'yapıştırmak' ve performans dışı kritik şeyler yapmak (önişleme, veri işleme, ...). Bunu önemli buluyorum çünkü bu dillerde hızlı geliştirme ve prototip oluşturma çok daha kolay.

4

İlk önce ne yapmak istediğinize karar vermeniz, ardından o görev için doğru aracı aramanız gerekir.

Çok genel bir yaklaşım R'yi ilk versiyonlar için kullanmak ve yaklaşımınızın doğru olup olmadığını görmek. Biraz hız yok, ancak onunla hemen hemen her şeyi deneyebileceğiniz çok güçlü komutlar ve eklenti kütüphaneleri var: http://www.r-project.org/

İkinci fikir, kütüphanelerin arkasındaki algoritmaları anlamak istiyorsanız, Sayısal Tariflere bir göz atmak isteyebilirsiniz. Farklı diller için mevcuttur ve öğrenme için ücretsizdir. Bunları ticari ürünlerde kullanmak istiyorsanız, bir lisans satın almanız gerekir: http://en.wikipedia.org/wiki/Numerical_Recipes

Çoğu zaman performans sorunu olmayacak, ancak onlar için doğru algoritmaları ve parametreleri bulacağından, iki sayıyı hesaplamadan ve ortaya koymadan önce 10 dakikayı derlemesi gereken bir canavar programı yerine hızlı bir komut dosyası diline sahip olmak önemlidir. sonuç.

Ve R'yi kullanmanın büyük bir artısı, verilerinizi görselleştirmek isteyebileceğiniz hemen hemen her tür diyagram için yerleşik işlevlere veya kitaplıklara sahip olmasıdır.

Eğer çalışan bir versiyonunuz varsa, onu daha performanslı olduğunu düşündüğünüz herhangi bir dile taşımak neredeyse kolaydır.

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.