Кращі мови для наукових обчислень [закрито]


10

Здається, що більшість мов мають деяку кількість бібліотек наукових обчислень.

  • Python має Scipy
  • Rust має SciRust
  • C++має кілька у тому числі ViennaCLіArmadillo
  • Javaмає Java Numericsі Colt, а також кілька інших

Не кажучи вже про такі мови, як Rі Juliaспеціально розроблені для наукових обчислень.

З такою кількістю варіантів, як вибрати найкращу мову для завдання? Крім того, які мови будуть найбільш ефективними? Pythonі, Rздається, мають найбільшу тягу в просторі, але логічно складена мова здається, що це був би кращий вибір. І що-небудь коли-небудь перевершить Fortran? Додатково компільовані мови мають тенденцію до прискорення графічного процесора, тоді як інтерпретовані мови як Rі Pythonні. Що слід враховувати при виборі мови та які мови забезпечують найкращий баланс корисності та продуктивності? Чи є мови, які мають значні наукові обчислювальні ресурси, які я пропустив?

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
Тут немає жодного питання. Якщо вам потрібно зробити базові дослідження мови програмування, вам краще прочитати Вікіпедію, ніж чекати, коли хтось з’явиться тут, щоб підштовхнути його хобі-коня.
Дірк Еддельбуеттель

@DirkEddelbuettel Дуже хороший момент. Думав, що краще спробувати створити контент, ніж вдосконалити його на даний момент у бета-версії, але я не знаю величезної кількості про бета-версії SE. Це був хороший хід з мого боку чи ні?
indico

1
Подивіться на ці цифри.
Емре

@DirkEddelbuettel Ви не помиляєтесь, але я сподівався на те, щоб сприяти дискусії про корисні характеристики та інструменти, пов’язані з різними мовами. Мова, якою ви користуєтесь, є важливим інструментом в науці про дані, тому я міркував, що люди можуть обговорити інструменти, які їм надають перевагу, і тут є об'єктивні переваги, як ресурс для тих, хто хоче спробувати подібну роботу.
ragingSloth

1
@indico Спробуйте cran.r-project.org/web/packages/overlap/index.html, який я лише перший випадково вибрав. Але насправді я особисто знав багатьох статистиків, які написали пакети R. Жоден із них ще не написав пітона. Щоб трохи розширити розмову, цікаво kdnuggets.com/2013/08/… .
Лембік

Відповіді:


12

Це досить масове питання, тому це не має бути повною відповіддю, але, сподіваємось, це може допомогти інформувати загальну практику щодо визначення найкращого інструменту для роботи, коли справа стосується науки про дані. Як правило, у мене порівняно короткий список кваліфікацій, які я шукаю, коли мова йде про будь-який інструмент у цьому просторі. Вони не мають особливого порядку:

  • Продуктивність : В основному зводиться до того, наскільки швидко мова виконує множення матриць, оскільки це більш-менш важливе завдання в науці даних.
  • Масштабованість : Принаймні для мене особисто це зводиться до простоти побудови розподіленої системи. Це десь там, де Juliaсправді світять мови.
  • Спільнота . На будь-якій мові ви дійсно шукаєте активну спільноту, яка може допомогти вам, коли ви застряжете, використовуючи той інструмент, який ви використовуєте. Ось тут pythonдуже далеко випереджає більшість інших мов.
  • Гнучкість : Нічого гіршого, ніж обмеження мовою, якою ви користуєтесь. Це трапляється не дуже часто, але намагатися зобразити графічні структури haskell- це горезвісний біль, і Juliaвін заповнений великою кількістю болів архітектури коду в результаті такої молодої мови.
  • Простота використання : Якщо ви хочете використовувати щось у більшому середовищі, ви хочете переконатися, що налаштування є простим і його можна автоматизувати. Нічого не гіршого, ніж створити принадію для будівництва на півдесятка машин.

Є багато статей про продуктивність та масштабованість, але в цілому ви будете дивитись на різницю продуктивності, можливо, 5-10 разів між мовами, що може бути, а може і не мати значення в залежності від вашої конкретної програми. Що стосується прискорення GPU, cudamatце дійсно безпроблемний спосіб налагодити його роботу python, і cudaзагалом бібліотека зробила прискорення GPU набагато доступнішим, ніж раніше.

Дві основні показники, які я використовую як для спільноти, так і для гнучкості, - це перегляд мовного менеджера пакунків та мовних питань на такому сайті, як SO. Якщо є велика кількість якісних питань та відповідей, це хороший знак того, що громада активна. Кількість пакетів та загальна активність у цих пакунках також можуть бути хорошим проксі для цього показника.

Що стосується простоти використання, я твердо вірю, що єдиний спосіб насправді знати - це власне налаштувати його. Існує багато забобонів навколо безлічі інструментів Data Science, зокрема таких речей, як бази даних та розподілена обчислювальна архітектура, але немає можливості реально дізнатися, чи можна щось легко чи важко налаштувати та розгорнути, не будуючи його самостійно.


Додамо до цієї відповіді: з точки зору масштабованості Scalaта Goварто згадати.
Marc Claesen

Я б додав ясності та стислості (пов'язані з синтаксисом та мовною архітектурою, але не тільки). Уміння швидко писати та читати без болю робить величезну різницю (оскільки час програмістів дорожчий, ніж машинний час).
Пьотр Мігдал

5

Найкраща мова залежить від того, що ви хочете зробити. Перше зауваження: не обмежуйтеся однією мовою. Вивчення нової мови - це завжди добре, але в якийсь момент вам потрібно буде вибрати. Можливості, пропоновані самою мовою, очевидно, що слід враховувати, але, на мою думку, важливіші такі:

  • доступні бібліотеки : чи потрібно реалізовувати все з нуля, чи можна повторно використовувати наявні речі? Зауважте, що ці бібліотеки не повинні бути будь-якою мовою, яку ви розглядаєте, доки ви можете легко інтерфейсувати. Робота мовою без доступу до бібліотеки не допоможе вам виконати справи.
  • кількість експертів : якщо ви хочете, щоб зовнішні розробники або почали працювати в команді, ви повинні врахувати, скільки людей насправді знають мову. Як крайній приклад: якщо ви вирішили працювати в Brainfuck тому, що вам це подобається, знайте, що ви, ймовірно, працюєте наодинці. Існує багато опитувань, які можуть допомогти оцінити популярність мов, включаючи кількість запитань на одну мову на ПЗ.
  • інструментальний ланцюг : чи маєте ви доступ до хороших налагоджувачів, профілів, інструментів для документації та (якщо ви в цьому займаєтесь) IDE?

Я усвідомлюю, що більшість моїх позицій віддають перевагу усталеним мовам. Це з точки зору "виконувати справи".

Зважаючи на це, я особисто вважаю, що набагато краще опанувати мову низького рівня та мову високого рівня:

  • низький рівень: C ++, C, Fortran, ... за допомогою яких ви можете реалізувати певні гарячі точки профілювання, лише якщо вам це потрібно, оскільки розвиток цих мов, як правило, повільніше (хоча це є предметом дискусій). Ці мови залишаються королем пагорба з точки зору критичних показників і, ймовірно, залишаться на вершині довгий час.
  • високий рівень: Python, R, Clojure, ... "склеювати" речі разом і робити критичні речі, що не відповідають ефективності (попередня обробка, обробка даних, ...). Я вважаю це важливим просто тому, що набагато простіше зробити швидкий розвиток та складання прототипів на цих мовах.

4

Спочатку вам потрібно вирішити, що ви хочете зробити, а потім шукати правильний інструмент для цього завдання.

Дуже загальним підходом є використання R для перших версій та перевірка правильності вашого підходу. Йому бракує трохи швидкості, але він має дуже потужні команди та бібліотеки аддонів, з якими ви можете спробувати майже все: http://www.r-project.org/

Друга ідея полягає в тому, що якщо ви хочете зрозуміти алгоритми, що стоять за бібліотеками, ви можете заглянути в числові рецепти. Вони доступні для різних мов і безкоштовно використовуються для навчання. Якщо ви хочете використовувати їх у комерційних продуктах, вам потрібно придбати ліцензію: http://en.wikipedia.org/wiki/Numerical_Recipes

Більшу частину часу продуктивність не буде проблемою, але пошук правильних алгоритмів та параметрів для них, тому важливо мати швидку мову сценаріїв замість монстрової програми, якій спочатку потрібно зібрати 10 хвилин, перш ніж обчислити два числа та викласти результат.

І великим плюсом у використанні R є те, що він має вбудовані функції або бібліотеки практично для будь-якого типу діаграм, які можуть вам знадобитися для візуалізації ваших даних.

Якщо тоді у вас є робоча версія, перенести її на будь-яку іншу мову, на вашу думку, є більш ефективною.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.