Юлія: Підвівши підсумки того, як це було


19

Я наштовхнувся на питання 2012 року, в якому було дуже добре обговорювати Юлію як альтернативу R / Python для різних видів статистичної роботи.

Тут лежить оригінальний запитання 2012 року про обіцянку Джулії

На жаль, тоді Юлія була зовсім новою, і набори інструментів, необхідні для статистичної роботи, були дещо примітивними. Випрасовували помилок. Дистрибуції було важко встановити. Et cetera.

Хтось дуже влучно прокоментував це питання:

Це сказало, що минуло 5 років, перш ніж на це питання можна буде відповісти заднім числом. На даний момент Джулії бракує таких критичних аспектів системи статистичного програмування, яка могла б конкурувати з R для щоденних користувачів:

Це було у 2012 році. Тепер, коли минув 2015 рік і минули три роки, мені було цікаво, як люди думають, що Юлія зробила?

Чи є багатший досвід досвіду з самою мовою та загальною екосистемою Юлії? Я хотів би знати.

Конкретно:

  1. Ви б порадили будь-яким новим користувачам статистичних інструментів вивчати Джулію над R?
  2. Які типи випадків використання статистики ви б порадили комусь використовувати Юлію?
  3. Якщо R у певному завданні повільно, чи є сенс перейти на Julia чи Python?

Примітка: вперше розміщено 14 червня 2015 року.


2
Нещодавно я подивився і не вразив глибиною своїх пакетів статистики. Якщо я не помиляюся, Python також інтерпретується, тому матиме подібні обмеження, як Р. Залучення Джулії, як я зрозумів, це обіцянка додаткової швидкості та кращого доступу до паралелізації.
DWin

3
Я думаю, що проблема з Джулією полягає в тому, що SciPy постійно покращується, і тепер у нас також є Torch. Ніхто не хоче вивчати третю (чи четверту чи п’яту) наукову мову обчислень, навіть якщо вона швидка і має класні функції перевантаження функцій.
тіньтакер

4
Джулія - ​​це добре розроблена, приємна мова, але, на мою думку, вона надто пізно приїхала. Потужність обчислень матричної форми з одним вузлом давно пройшла. Julia по суті є Fortran 2.0, має кілька приємних функцій, але, оскільки ми все більше переходимо до хмарних обчислень, у неї є дуже мало запропонувати для таких функціональних мов, як Scala, Clojure і навіть Python. Якби Юлія була в її нинішньому стані 10 років тому, це могло б мати величезний успіх.
Марк Класен

2
Python та Rcpp справді динамічно розвиваються, R привертає все більше уваги (R Consortium, Microsoft тощо), тому Юлії здається важким наздогнати ...
Тім

1
Я не бачив ділової справи для Джулії, і досі її немає. Це здавалося зайвою спробою програмістів відновити щось, що вже існує.
Аксакал

Відповіді:


15

Я перейшов на Джулію, і ось мої прагматичні причини:

  • Це дійсно добре клеїть код. У мене багато застарілого коду в MATLAB, і для установки MATLAB.jl знадобилося 5 хвилин, працює прекрасно і має лаконічний синтаксис, завдяки якому використовувати функції MATLAB природно. Джулія також має те саме для R, Python, C, Fortran та багатьох інших мов.
  • У Юлії справді добре паралелізм. Я кажу не лише про паралелізм декількох процесорів (спільної пам'яті), але і про багатовузловий паралелізм. У мене є доступ до вузлів HPC, які використовуються не надто часто, тому що кожен досить повільний, тому я вирішив спробувати Джулію. Я додав @parallel до циклу, почав його, повідомивши йому машинний файл, і bam використовував усі 5 вузлів. Спробуйте зробити це в R / Python. У MPI це займе деякий час, щоб змусити його працювати (і це знаючи, що ви робите), не кілька хвилин, коли ви вперше спробуєте це!
  • Векторизація Юлії є швидкою (у багатьох випадках швидшою, ніж будь-яка інша мова вищого рівня), а її девекторизований код майже С швидкий. Отже, якщо ви пишете наукові алгоритми, зазвичай спочатку ви пишете його в MATLAB, а потім переписуєте в C. Julia дозволяє вам один раз його написати, потім дайте йому код компілятора і через 5 хвилин це швидко. Навіть якщо ви цього не зробите, це означає, що ви просто пишете код будь-яким способом, який буде природним, і він буде працювати добре. У R / Python іноді доводиться думати досить складно, щоб отримати хорошу векторизовану версію (це може бути важко зрозуміти згодом).
  • Метапрограмування чудово. Подумайте, скільки разів ви були на зразок "Я хотів би, щоб я міг ______ мовою". Напишіть для нього макрос. Зазвичай хтось уже є.
  • Все на Github. Вихідний код. Пакети. Супер легко читати код, повідомляти про проблеми розробникам, розмовляти з ними, щоб дізнатися, як щось зробити або навіть вдосконалити пакети самостійно.
  • У них є кілька справді хороших бібліотек. Для статистики вас, мабуть, зацікавлять їх пакети оптимізації (JuliaOpt - це група, яка ними керує). Числові пакети вже на першому рівні і лише вдосконалюються.

Це сказало, що я все ще дуже люблю Rstudio, але нова Juno на Atom - це дуже приємно. Коли він більше не перебуває у важкій розробці і стабільний, я можу вважати це кращим, ніж Rstudio через простоту плагінів (приклад: у нього хороший плагін для адаптації до екранів hidpi). Тож я вважаю, що Юлія - ​​це гарна мова, яку слід вивчати зараз. На сьогодні це добре спрацювало для мене. YMMV.


Ви не хочете оновлювати цю відповідь, оскільки минуло більше 3 років?
Байекіст

1
Я дав оновлену відповідь тут: scicomp.stackexchange.com/questions/10922/… . Можливо, це має бути скопійовано.
Кріс Ракаукас

11

Я думаю, що "вивчити X над Y" - це не правильний спосіб сформулювати питання. Насправді ви можете навчитися (принаймні основам) обох і визначитися з правильним інструментом залежно від конкретної задачі. А оскільки Джулія успадкувала більшість своїх синтаксисів та понять з інших мов, то зрозуміти це було б дуже просто (як і Python, хоча я не впевнений, що те саме можна сказати і про R).

То яка мова краще підходить для якого завдання? На основі свого досвіду роботи з цими інструментами я би оцінив їх наступним чином:

  • Для чистого статистичного дослідження, яке можна виконати за допомогою REPL та декількох сценаріїв, R здається ідеальним вибором. Він спеціально розроблений для статистики, має найдовшу історію інструментів і, мабуть, найбільший набір статистичних бібліотек.

  • Якщо ви хочете інтегрувати статистику (або, наприклад, машинне навчання) у виробничу систему , Python здається набагато кращою альтернативою: як мова програмування загального призначення має дивовижний веб-стек, прив’язки до більшості API та бібліотек буквально для всього, від скраптування Інтернету до створення 3D-ігор .

  • Високопродуктивні алгоритми набагато простіше написати в Джулії . Якщо вам потрібно лише використовувати або комбінувати існуючі бібліотеки на кшталт SciKit Learn або e1071, що підтримуються C / C ++, вам буде добре з Python та R. Але коли справа доходить до самого швидкого бекенда, Юлія стає в режимі реального часу: це набагато швидше, ніж Python або R і не потребує додаткових знань C / C ++. Як приклад, Mocha.jl повторюється в чистому режимі глибокого вивчення Julia Caffe , спочатку написаному на C ++ із обгорткою в Python.

  • Також не забувайте, що деякі бібліотеки доступні лише на деяких мовах. Наприклад, Python має зрілу екосистему для комп’ютерного зору, деякі алгоритми відповідності форми і трансформації реалізовані лише в Джулії, і я чув про унікальні пакети статистики медицини в Р.


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

1
Парадоксальна проблема написання високопродуктивних алгоритмів полягає в тому, що, хоча вони можуть простіше писати мовою вищого рівня, як R або Julia, до моменту, коли ви насправді пишете високопродуктивні алгоритми, ви, мабуть, любите використовувати щось на зразок C ++. А може, це тільки я.
Кліф АВ

3

(b) Які випадки використання статистичних даних ви б порадили комусь використовувати Юлію

(c) Якщо R певний у виконанні певного завдання, чи є сенс перейти на Джулію чи Пітон?

Високі розмірні та обчислювальні інтенсивні проблеми.

  • Багатопроцесорна. Паралельні можливості одного вузла Джулії ( @spawnat) набагато зручніші, ніж у python. Наприклад, у python ви не можете використовувати карту зменшення багатопроцесорного пулу на REPL, і кожна функція, яку ви хочете паралелізувати, вимагає багато котлованних панелей.

  • Кластерні обчислення. ClusterManagersПакет Джулії дозволяє використовувати обчислювальний кластер майже так само, як і окрему машину з декількома ядрами. [Я грав із тим, щоб це відчувало більше, як сценарій у ClusterUtils ]

  • Спільна пам'ять. SharedArrayОб'єкти Юлії перевершують еквівалентні об'єкти спільної пам'яті в python.

  • Швидкість. Моя реалізація Julia (одномашинна) швидша, ніж моя R-реалізація при генерації випадкових чисел і в лінійній алгебрі (підтримує багатопотокові BLAS).
  • Взаємодія. PyCallМодуль Джулії надає вам доступ до екосистеми пітона без обгортки - наприклад, я це використовую для pylab. Для R є щось подібне, але я цього не пробував. Є також ccallдля бібліотек C / Fortran.
  • GPU. Обгортки CUDA Джулії набагато розвиненіші, ніж у python (Rs були майже неіснуючими, коли я перевіряв). Я підозрюю, що так і надалі буде через те, що набагато простіше викликати зовнішні бібліотеки в Джулії, ніж у python.

  • Екосистема. В Pkgвикористовує модуль GitHub в якості движка. Я вважаю, що це матиме великий вплив на довготривалу ремонтопридатність модулів Julia, оскільки це набагато простіше запропонувати патчі або власникам перекласти відповідальність.

  • σ - допустиме ім'я змінної;)

Написання швидкого коду для великих проблем все більше залежатиме від паралельних обчислень. Python за своєю суттю є паралельним недружньою (GIL), а нативної мультипроцесори в R - не існує AFAIK. Джулія не вимагає, щоб ви спускалися до C, щоб написати виконавський код, зберігаючи велику частину відчуття python / R / Matlab.

Основним недоліком у Юлії, що виходить від python / R, є відсутність документації поза основними функціональними можливостями. python дуже зрілий, і те, що ви не можете знайти в документах, як правило, знаходиться в потоці stackoverflow. Система документації R порівняно непогана.

(а) Чи порадили б ви будь-яким новим користувачам статистичних інструментів вивчати Джулію над R?

Так, якщо ви підходите до випадків використання в частині (b). Якщо ваш випадок використання передбачає багато різнорідних робіт

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