Veri Bilimi

R vs. Python vs. Julia: Verimli kod yazmak ne kadar kolay?

Son yazımda, Julia‘nın Veri Bilimi topluluğuna nasıl canlandırıcı bir programlama zihniyeti getirdiğini göstererek R ile Julia’yı karşılaştırdım. Ana paket, Julia ile performansı artırmak için artık vektörleştirmenize gerek olmadığıdır. Aslında, döngülerin iyi kullanımı en iyi performansı sağlayabilir.

Bu yazıda, karışıma Python ekliyorum. Veri Bilimcilerinin tercih ettiği dilin söyleyecek bir sözü var. Yerleşik uygulamaların mevcut olduğu ve algoritmayı sıfırdan programlamanın basit olduğu çok basit bir sorunu çözeceğiz. Amaç, verimli kod yazmamız gerektiğinde seçeneklerimizi anlamaktır.

Deneyler

Sıralanmamış bir tamsayı vektörü üzerinde üyelik testi problemini ele alalım:

Doğrusal arama algoritmasını R, Python ve Julia’da uyguladım ve CPU sürelerini bir C uygulamasıyla karşılaştırdım (1.000.000 benzersiz tamsayı içeren bir dizi üzerinde 1.000 arama). Birkaç uygulama çeşidi test edildi:

  • Built-in functions/operators (infindfirst);
  • Vectorized (vec);
  • Map-reduce (mapr);
  • Loops (forforeach).

Sonuç:

R vs. Python vs. Julia: Verimli kod yazmak ne kadar kolay?
R vs. Python vs. Julia: Verimli kod yazmak ne kadar kolay?

Bu basit problem için yan yana sonuçlara baktığımızda şunu gözlemliyoruz:

  • Julia’nın performansı, uygulamada neredeyse bağımsız olarak C’ye yakındır;
  • Julia’daki istisna, performansın yaklaşık 3 kat düşmesiyle R benzeri vektörleştirilmiş kod yazarken;
  • Python’a JIT derlemesi (Numba) eklerken, döngü tabanlı uygulamalar Julia’nın performansına yaklaştı; yine de Numba, Python kodunuza kısıtlamalar getirerek bu seçeneği bir uzlaşma haline getirir;
  • Python’da yerel listeler ve NumPy dizileri arasında ve Numba’nın ne zaman kullanılacağını iyi seçin: daha az deneyimli olanlar için hangisinin en iyi veri yapısı olduğu (performans açısından) açık değildir ve net bir kazanan yoktur (özellikle kullanımı dahil ederseniz) dinamik olarak eleman ekleme durumu, burada ele alınmamıştır);
  • R en hızlı değildir, ancak Python’a kıyasla tutarlı bir davranış elde edersiniz: R’deki en yavaş uygulama en hızlıdan ~24x daha yavaşken, Python’da ~343x (Julia’da ~3x);
  • Yerel R her zaman yerel Python’dan daha iyi performans gösterdi;
  • Python veya R’de döngüden kaçınamadığınızda, öğe tabanlı döngü, dizin tabanlı döngüden daha verimlidir.

Bu makalenin kapsamlı bir versiyonu orijinal olarak burada yayınlandı (açık erişim).

About the author

admin

Add Comment

Click here to post a comment

Bu site, istenmeyenleri azaltmak için Akismet kullanıyor. Yorum verilerinizin nasıl işlendiği hakkında daha fazla bilgi edinin.