Мягкий вопрос: где Python вписывается в картину?


9

Поэтому я спорю о том, стоит ли мне заниматься изучением Python. Говоря с моими профессорами, Matlab, кажется, является общим языком, используемым в прикладной математике / вычислительной науке, насколько это касается научных кругов ; в то время как в промышленности мои профессора (особенно те, кто работал в промышленности) говорили, что изучение c ++ - самый безопасный путь.

Я хотел бы услышать от вас, как в академических кругах, так и в промышленности, о том, стоит ли мне вообще беспокоиться о Python или просто получить действительно хорошие знания (MATLAB и C ++) на данный момент.

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

В настоящее время я учусь на старшекурснике по математике со специализацией в области вычислений. Я хотел бы учиться в аспирантуре и продолжать исследования (я никогда не видел себя увлекающимся преподаванием) или работать в лаборатории. Оба из них идеальны. Относительно того, какие области исследования, вероятно, что-то вроде численного анализа или вероятности. Если план А не сработает, я буду открыт для работы в промышленности, если подготовка к работе в промышленности не отнимает у школы слишком много времени. Итак, я решил, что я должен изучать языки, которые распространены в промышленности, в качестве резервной копии. Но это также, почему я в конфликте. Я не могу изучать каждый язык или готовиться к любой возможности, так как это займет слишком много времени.


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 ++, но я не знаю, какие люди используют вероятностные / стохастические процессы / комбинаторику, поэтому ваш пробег может отличаться.
Джефф Оксберри

Я бы согласился с Джеффом, что изучение Python в первую очередь является хорошей идеей, так как это поможет вам двигаться намного быстрее. 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) не годятся: в символьных вычислениях.

Итак, все четыре совершенно разные: с ++ старый и стабильный язык программирования относительно низкого уровня; Python - новый и развивающийся компьютерный язык высокого уровня; Matlab - численная вычислительная среда с сильным акцентом на векторную алгебру (хотя она способна делать более или менее все); Mathematica - это система компьютерной алгебры с сильным акцентом на символических вычислениях (то же самое замечание, что и в Matlab). Таким образом, они не являются конкурентами.


Верно; Я часто удивляюсь (и иногда поражаюсь), когда вижу, что люди используют Mathematica для научных вычислений ...
Кристиан Клэйсон,

@ChristianClason и Misha: ошибочно считать, что Mathematica - это прежде всего система компьютерной алгебры. Если вы посмотрите на том , как люди используют его , большинство из них не символическая алгебра, а в некоторых числовых полях конкурентоспособна с помощью инструментов MATLAB и R. (Лично я выбрал бы мма над этими двумя другими для большинства цифровых данных обработки задач , но это, конечно, личное предпочтение.) В некоторых областях, таких как численная интеграция или визуализация, кажется, что она опережает MATLAB. В других, таких как PDE, это далеко позади.
Сабольч

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

4

Я знаю, что ваш вопрос касается использования python, но вы сказали, что вас интересует «численный анализ или вероятность». Я не знаю, рассматривали ли вы R , но он разработан специально для такой работы. R является очень мощным языком для вероятности и статистики и имеет очень большую и активную пользовательскую базу математиков и ученых.

R отличается от Matlab в том смысле, что он с открытым исходным кодом, имеет статистическую направленность и создает очень впечатляющие графики (см. Ggplot2 ). В R вы можете делать почти все, что вы можете делать в Matlab, но мой любимый аспект - вклад пользователя. Большинство предоставленных библиотек написаны учеными и опубликованы в статистическом журнале. У них также есть очень хорошо написанные руководства (называемые ссылками и виньетками). Моя новая любимая библиотека предоставляет поддержку CUDA на основе библиотек CULA (бесплатно для академического использования). Существует также огромное количество методов для теории вероятностей (см. Здесь ).

В любом случае, R определенно разработан специально для вашей работы, поэтому проверьте его и подумайте о добавлении его в свой инструментарий :) Помните, что вы можете выполнять R-скрипты в Python и Python-скрипты в R и легко захватывать результаты.

Удачи!


2

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

С другой стороны, если вы занимаетесь собственными научными вычислениями (например, имитацией обтекания аэродинамического профиля, имитацией ядерного синтеза в плазме, симуляцией конвекции в земной мантии) или разработкой численных методов с учетом таких приложений, тогда на языке Lingua франка это C ++. Каждый крупномасштабный научно-вычислительный пакет сегодня написан на C ++ (или C), к лучшему или к худшему, и так он будет существовать еще долго. Чтобы назвать лишь несколько примеров, PETSc и невероятно большие и разнообразные пакеты Trilinos написаны на C и C ++ соответственно. Среди больших библиотек конечных элементов с открытым исходным кодом, которые я могу себе представить (libMesh, deal.II, oofem, freefem), каждая написана на C ++. Среди программ визуализации две самые большие из них (Visit и Paraview) написаны на C ++. Я мог бы расширить список.

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


1
Честно говоря, есть много пользователей PETSc из Фортрана и немало из Python. C легко вызывается практически с любого языка, хотя программирование на разных языках сопряжено со своими сложностями, и я не рекомендую его очень часто. Вопрос о том, где в стеке находится ваш код, также слишком часто упускается из виду. Приложения конечного пользователя должны, например, делать выбор программных решений, нежели системные библиотеки.
Джед Браун

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

1

Чтобы добавить мои два цента, у меня был и недавний академический опыт (новый аспирант :)) и опыт работы в отрасли (производитель геодезического оборудования).

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

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

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.