Питання питання: Де Python вписується в малюнок?


9

Тому я обговорював, чи варто мені турбуватися над вивченням Python. Якщо говорити з моїми професорами, Матлаб, здається, є загальною мовою, що використовується у прикладній математиці / обчислювальній науці, що стосується наукових шкіл; тоді як у галузі , мої професори (особливо ті, хто працював у галузі) сказали, що навчання с ++ - це найбезпечніший шлях.

Мені хотілося б почути від тих із вас, як в наукових колах, так і в галузі, про те, чи варто мені взагалі зациклюватися на Python, чи просто по-справжньому добре переконатися в тому, що я знаю (MATLAB та C ++).

Оновлення : Джефф дає хороший момент, я, мабуть, повинен закласти ще кілька деталей:

В даний час я магістрант у своєму минулому році, вивчаю математику зі спеціалізацією обчислення. Я хотів би продовжити школу і зупинитися на дослідженні (я ніколи не бачив, щоб насолоджуватися викладанням) або працювати в лабораторії. Обидва ці ідеальні. Щодо того, які сфери досліджень, мабуть, щось уздовж чисельного аналізу чи ймовірності. У випадку, якщо план A не вийде, я був би відкритий для роботи в галузі, доки підготовка до себе в галузі не забирає занадто багато часу від школи. Отже, я подумав, що я повинен вивчити мови, які є загальними у промисловості, як резервне копіювання. Але це також чому я конфліктую. Я не можу вивчати кожну мову або готуватися до кожної можливості, оскільки це зайняло б занадто багато часу.


1
Ваше питання хороший, але, мабуть, трохи надто відкритий і невиразний. Яку дисципліну ви вивчаєте, і що, на вашу думку, ви могли б хотіти займатися?
Джефф Оксберрі

1
На прикладі того, що можна зробити за допомогою Python, які не працюватимуть добре в MATLAB або чистому C ++: epubs.siam.org/doi/abs/10.1137/110856976 . (безсоромне попередження про саморекламу)
Девід Кетчесон

Відповіді:


15

Проблема з будь-яким із цих типів питань полягає в тому, що відповідь сильно залежить від громади.

Щоб відповісти на деякі ваші запитання у безвідмовному порядку:

MATLAB використовується дуже багато як в наукових колах, так і в промисловості. Однією з причин того, що він досить багато використовується в промисловості, є те, що його викладають в наукових закладах. Я знаю факт, що MATLAB використовується в лабораторії Лінкольна і в підрозділах досліджень і розробок DuPont.

Існують програмні пакети, написані на Python, які добре підходять для символічних обчислень, таких як sympy та SAGE. Залежно від ваших конкретних інтересів, вимог до функцій та особистих переваг, Mathematica (або Maple, або інші комп'ютерні системи алгебри) можуть перевершувати ці пакети.

MATLAB має Symbolic Math Toolbox, який можна використовувати для деяких символічних обчислень, але його символічні можливості маніпулювання, на мій досвід, слабші, ніж Mathematica та Python. Деякі символічні маніпуляції теоретично можна було б здійснити в C ++, але це непросто. MATLAB також не є хорошою загальною мовою. Він добре виконує лінійну алгебру та чисельну математику, але не має хороших можливостей введення / виводу. Він не має хороших паралельних можливостей (навіть якщо існують варіанти, як паралельний MATLAB, MATLAB Star-P і Parallel Computing Toolbox) порівняно з C ++ або Python. Навіть його графічні можливості могли використовувати деякі роботи. MATLAB також дорогий, якщо ви не пов'язані з установою, яка має ліцензію. Кожен набір інструментів придбати дорого і зазвичай коштує близько сотень до тисяч доларів.

Mathematica виконує чисельні обчислення на додаток до символічних обчислень. Я не бачив, щоб люди використовували його для чисельних обчислень стільки, скільки я бачив, як люди використовують Python та MATLAB для чисельної роботи. Він теж має паралельні можливості, але не може бути масштабним для великих суперкомп'ютерів.

Python - це хороша мова загального призначення, яка вважається простою для вивчення та корисності. Він використовується на великих суперкомп'ютерах (див., Наприклад, PyClaw, petsc4py, mpi4py та інші), і добре масштабує. Він також високо оцінював числові пакети (наприклад, NumPy та SciPy); велика, активна громада; хороші можливості обробки вводу / виводу; та хороші графічні бібліотеки разом із великим сховищем бібліотек (ознайомтеся з PyPI). Це безкоштовно, порівняно з патентованими пакетами, згаданими вище. Більшу частину функціональності MATLAB або Mathematica ви можете знайти у вільно доступних пакетах Python. Основним недоліком Python є те, що він, як правило, повільніше, ніж компільовані мови на зразок C ++, хоча цей недолік зменшується при постійному розвитку Cython, Numba та PyPy; його можна також зменшити, замінивши повільніший код Python на код C (або C ++, або Fortran) та належним чином написані обгортки Python. Інтерпретуючи, багато людей повідомляють про більш високу продуктивність з Python, ніж компільовані мови. Це досить популярно і, напевно, варто вчитися, якщо у вас є час.

C ++ - складна мова, і її використання в обчислювальній науці є суперечливим. Його великий набір функцій може полегшити написання програмного забезпечення, яке важко підтримувати, і його потрібно складати назавжди. Однак, використовувані з розумом, такі функції, як шаблонування та перевантаження оператора, можуть бути використані з великим ефектом, як це було в таких проектах, як deal.II, Blaze та Elemental (серед інших). C ++ має круту криву навчання, коли справа доходить до її вдосконалених особливостей, і я чула анекдотичні повідомлення про те, що люди потребували років, щоб відчути, що вони вивчили повну мову. Тим не менш, це також популярна мова, незважаючи на проблеми використання та складний набір функцій. Напевно, варто навчитися хоч би зробити себе більш працездатною; її основними конкурентами в галузі обчислювальної техніки є Fortran і C, яким також варто вивчити.

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


Тож, що стосується академічних наук, ви б сказали, що краще інвестувати час на вивчення Python замість C ++?
AlanH

1
Знову ж таки, все залежить. Я все ще більше ставлюсь до академічної сторони речей і весь час використовую Python. Мені також доводиться використовувати C ++ для роботи, написаної цією мовою. Моя особиста думка полягає в тому, що навчання Python спочатку, ймовірно, окупиться за вас швидше, ніж якщо ви спершу засвоїли C ++, але я не знаю, якими людьми користуються імовірнісні / стохастичні процеси / комбінаторика, тому ваш пробіг може змінюватися.
Джефф Оксберрі

Я погодився би з Джеффом, що спочатку вивчити пітона - це гарна ідея, оскільки ви змусите вас йти набагато швидше. C ++ - це гарна мова, але крива навчання значно вища, і навчитися її напівсердечно можна сперечатися гірше, ніж її зовсім не вивчити.
Л.Клевін

"C ++ має круту криву навчання, коли справа доходить до її вдосконалених функцій, і я чув анекдотичні повідомлення про те, що люди потребували років, щоб відчути, що вони вивчили повну мову". Так, я не міг більше погодитися. Я думаю, що будь-який програміст, який коштує своєї солі, повинен навчитися c / c ++ деякий час у своєму житті, але це обов'язково потребує 10000 годин, щоб справді відчути себе експертом. +1
Джеймс

11

Як вказували Міша та Джефф Оксберрі, Mathematica дійсно має інший фокус (тільки тому, що ви можете забити в цвях викруткою, це не означає, що вам слід). Тож я сприймаю ваше запитання як "Якщо я знаю Matlab, чому я повинен вивчати Python?" [Редагувати: і так, мабуть, ти зробив.]

За всіма намірами та цілями, Matlab є англійською мовою наукових обчислень - з усіма позитивними та негативними конотаціями, що ця аналогія тягне за собою. Одним із важливих моментів є те, що код Matlab, ймовірно, буде корисним (тобто виконуваним, а також зрозумілим) для більшості людей, ніж код будь-якою іншою мовою. (Це головна причина, коли я надаю коди Matlab для всіх своїх алгоритмів.) Також робочий стіл Matlab може бути дуже корисним під час прототипування, особливо можливість запуску бітів коду (комірок) безпосередньо з редактора, а також вбудованого- в профілері.

Якщо говорити, якщо ви хочете вивчити іншу мову високого рівня для розваги та отримання прибутку, ви можете зробити гірше, ніж Python. Окрім того, що перераховував Джефф:

  • Набагато простіше взаємодіяти із зовнішніми програмами та бібліотеками в Python. Немає більше мексичних файлів!

  • Якщо ви далеко не на робочому столі, налаштувати і працювати Python + NumPy / SciPy набагато простіше, ніж отримати доступ до ліцензії Matlab.

  • Основна причина, по якій Matlab швидше, ніж NumPy, полягає в тому, що він поєднує оптимізовані бібліотеки постачальників для лінійної алгебри (MKL, ACML). Цілком можливо ( якщо трохи втомлює ) , щоб створити свій власний NumPy і зв'язати його з тими ж бібліотеками , щоб отримати майже таку ж продуктивність (і багатопоточність) в Matlab для лінійної алгебри, а також кращу продуктивність Python для всього іншого. (Хоча це, звичайно, вимагає ліцензії навіть для академічного використання, тим самим заперечуючи бонус за безкоштовне програмне забезпечення, все ж цікавим варіантом є той самий код, що працює на роботодавців, що спонсоруються прискореною установкою в офісі, а також на позаставній полиці встановити на домашню машину чи ноутбук.)

  • Хоча набори інструментів Matlab є однією з його торгових точок, є кілька областей, де Python випереджає; зокрема, SymPy та FEniCS з великим запасом перемогли набір інструментів Symbolic та PDE.

  • Не забувайте про цікаву частину (семантичний пробіл та прив'язка імен, незважаючи на це): я бачив, як кілька колег покусали помилку Python, і справді щось дивно задовольняє написання алгоритму в Python, якого немає в Matlab ( хоча це може бути просто радістю від вивчення іноземної мови) :)

(Якщо ви почнете з NumPy, то ця сторінка може бути корисною.)


5

Python може замінити і c ++, і Matlab. Він добре поширений як в наукових колах, так і в промисловості. У промисловості його іноді використовують як клей для мов нижчого рівня, переважно c / c ++. Mathematica - це зовсім інша історія. Основна його перевага полягає в тому, що всі інші згадані (c / c ++; Matlab; Python) не є добрими: в символічних обчисленнях.

Отже, усі чотири абсолютно різні: c ++ - стара і стабільна відносно низький рівень мови програмування; Python - нова комп'ютерна мова високого рівня; Matlab - це чисельне обчислювальне середовище з сильним акцентом на векторній алгебрі (хоча вона здатна зробити більш-менш все); Математика - це система комп'ютерної алгебри з сильним акцентом на символічних обчисленнях (те саме зауваження, що і у матлаба). Таким чином, вони не є конкурентами.


Дійсно; Мене часто спантеличують (а іноді й дивують), коли я бачу, як люди використовують математику для наукових обчислень ...
Крістіан Класон

@ChristianClason та Misha: помилковим є уявлення, що Mathematica - це насамперед комп'ютерна алгебра. Якщо ви подивитеся на те, як люди насправді використовують його , більшість з них не є символічною алгеброю, і в кількох числових полях вона є конкурентоспроможною з такими інструментами, як MATLAB та R. (Особисто я вибрав би Mma над цими двома іншими завданнями для більшості числових завдань з обробки даних. , але це, звичайно, особисті переваги.) У деяких сферах, таких як чисельна інтеграція чи візуалізація, вона, здається, випереджає MATLAB. У інших, як, наприклад, PDE вирішує це значно позаду.
Szabolcs

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

4

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

R відрізняється від Matlab тим, що він є відкритим кодом, має фокус на статистиці та робить дуже вражаючі сюжети (див. Ggplot2 ). Ви можете зробити майже все в R, що ви можете зробити в Matlab, але моїм улюбленим аспектом є внесок користувача. Більшість бібліотек, що надаються, написані вченими та опубліковані в статистичному журналі. Вони також мають надзвичайно добре написані путівники (звані довідками та віньєтками). Моя нова улюблена бібліотека надає підтримку CUDA, побудовану на бібліотеках CULA (безкоштовно для академічного використання). Існує також велика кількість методів теорії ймовірностей (див. Тут ).

У будь-якому випадку, R, безумовно, розроблений спеціально для вашої лінійки роботи, тому перевірте це і розглядайте питання про додавання його до свого інструментарію :) Пам'ятайте, що ваші сценарії можуть виконувати R в Python та Python в R та легко фіксувати результати.

Удачі!


2

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

З іншого боку, якщо ви займаєтесь належними науковими обчисленнями (наприклад, імітацією потоку навколо аеропласта, імітацією ядерного синтезу в плазмі, імітацією конвекції в земній мантії) або розробкою чисельних методів з урахуванням таких застосувань, тоді лінгва франка - це C ++. Кожен широкомасштабний науковий обчислювальний пакет сьогодні написаний на C ++ (або на C), для кращого чи гіршого, і саме так воно залишається надовго. Наведемо лише кілька прикладів, що PETSc та неймовірно великі та різноманітні пакети Trilinos написані відповідно на C та C ++. Серед великих бібліотек з кінцевими елементами з відкритим кодом, про які я можу подумати (libMesh, deal.II, oofem, freefem), кожна з них написана на C ++. Серед програм візуалізації два найбільші (Візит та Парагляд) написані на C ++. Я міг би продовжити список.

Справа в тому, що якщо ви задовольняєтесь невеликими масштабами моделювання, люди використовують одну мову, але щоразу, якщо мова йде про серйозні, можливо, паралельні обчислення, всі вони використовують щось інше. Це напевно річ спільноти, але також і те, що вона сумісна - якщо PETSc і Trilinos написані на C та C ++, то я (будучи автором угоди.II) не можу легко вибрати будь-яку іншу мову, навіть якщо б хотів. Мені потрібно працювати з PETSc і Trilinos.


1
Справедливості, є багато користувачів PETSc, які приїжджають з Fortran, і дуже багато з Python. C легко зателефонувати практично з будь-якої мови, хоча змішане програмування має свій власний набір завдань, і я не рекомендую його дуже часто. Питання про те, де у стеці знаходиться ваш код, також занадто часто не враховується. Наприклад, додатки для кінцевих користувачів повинні робити різні варіанти дизайну програмного забезпечення, ніж бібліотеки системного рівня.
Джед Браун

Це справедливо. Але все ж правда, що новітні екземпляри програмного забезпечення, що використовується в масштабних обчисленнях, в основному написані на C і C ++ в наші дні (незважаючи на старі розсилки, написані у Fortran).
Вольфганг Бангерт

1

Щоб додати свої два центи, я мав як недавній академічний досвід (свіжий доктор наук :)), так і досвід галузі (виробник оглядового обладнання).

Ми робимо безліч числових обчислень на слабких вбудованих процесорах (думаю, процесори мобільних телефонів). Окрім того, що MATLAB для ARM відсутній, C ++ є королем у цьому світі - багато вбудованих компіляторних наборів не включають FORTAN!

Хоча ми маємо обмежену кількість ліцензій MATLAB, вимога зробити продукт, який малює 2 Вт потужності, перекосує нашу розробку на користь C ++ (експериментуючи вбік).

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