Неопубликованная запись
Размышления о переходе с MATLAB на Python
В последние годы наши заказчики все чаще поднимают вопрос о замещении проприетарных коммерческих сервисов и ресурсов на открытые. В частности, в проектах по энергетике многие расчеты ведутся с использованием среды MATLAB. На первый взгляд коммерческому пакету, заточенному на работу с матрицами, а также напичканному оптимизированными математическими алгоритмами, нет равных. Однако у MATLAB есть достаточно много аналогов: Julia, GNU Octave, Scilab, Sage. В этой статье мы хотим рассмотреть Python как значительно более распространенную и стабильную альтернативу MATLAB.
Кто есть кто?
MATLAB значит «Matrix Laboratory». Этот язык был создан 1970-х годах Кливом Моулером в Университете Нью-Мексико, США. Сейчас это коммерческий продукт компании MathWorks, платформа для программирования и пакет прикладных программ для решения задач технических вычислений. Пакет используют более миллиона инженерных и научных работников, он работает на большинстве современных операционных систем, включая Linux, macOS и, конечно, Windows. Python — это высокоуровневый язык программирования общего назначения, распространяющийся под свободной лицензией. Является одним из самых популярных языков программирования в мире (2-3 место по разным данным). Первый прототип был создан в 1989 году Гвидо ван Россумом в Центре математики и информатики в Нидерландах. Используется в анализе данных, машинном обучении, веб-разработке, построении вычислительных модулей и других сферах.
Общие принципы и особенности
Сравнивая языки MATLAB и Python, первое, что хочется отметить, - оба они интерпретируемые. То есть код выполняется построчно, а значит программы не нуждаются в предварительной компиляции и не зависят от компиллятора. Пишешь код, тут же его запускаешь, есть возможность быстро проверить работоспособность программы.
Оба языка с динамической типизацией, можно постоянно переиспользовать переменные, не задумываться о том, какой тип данных возвращает функция. Таким образом, внимание разработчика сосредотачивается больше на архитектуре и алгоритмах. Динамическая типизация ускоряет разработку, однако замедляет тестирование.
Языки объектно-ориентированные, есть полный или почти полный функционал классов. В случае MATLAB классы имеют достаточно гибкую настройку многих параметров. Есть интеграция с web, базами данных и всем необходимым.
В случае необходимости можно код обоих языков скомпилировать в исполняемый файл и передать на удаленный сервер для выполнения кода программы.
В рамках данной статьи не хочется погружаться в вопрос различия синтаксиса языков, это достаточно подробно рассмотрено здесь. Из ключевых моментов скажу, что в MATLAB нет понятия изменяемый объект или ссылка на переменную, все переменные копируются при передаче в/из функции. Нумерация массивов и матриц начинается с 1, в Python – с 0 (и это очень распространенная ошибка). MATLAB вносит путаницу при работе с текстом из-за наличия разных типов Character Arrays и String. Ну и так же MATLAB имеет очень мало, в сравнении с Python, всеми нами любимого синтаксического сахара (RuVers).
Эффективность
Говоря о крупных проектах, нельзя не затронуть вопрос скорости работы языков. Многие статьи утверждают, что при проведении значительных численных вычислений, MATLAB опережает библиотеку NumPy из Python более чем в 5 раз. Наши собственные сравнения показывают превосходство первого в 2-4 раза. В основном MATLAB опережает благодаря оптимизированному матричному умножению, а также адаптированному доступу по индексу.
Если же сравнивать решение оптимизационных задач, то результаты неоднозначнее. При решении систем линейных уравнений с ограничениями методом наименьших квадратов Python проигрывает значительнее, в 15-30 раз (библиотеки NumPy и SciPy). Однако решение задач линейного программирования Python даются практически за то же время, что и MATLAB (библиотеки NumPy и SciPy).
Сложность освоения
Сколько нужно времени для того, чтобы научиться базовому программированию на Python? Вообще, естественно, вопрос сугубо индивидуальный и в большей части зависит от навыков каждого программиста в отдельности. Однако, в среднем при факультативном самостоятельном изучении языка, если разработчик владеет языком MATLAB, то около двух месяцев. В случае обучения на курсах переподготовки или повышения квалификации – где-то около месяца: 10 занятий по 2 часа. Убедить всех, что это нужно – вечность...
Индивидуальные предпочтения
Что же касается личных предпочтений, какой язык программирования нравится больше? Лично мне MATLAB более симпатичен, чем Python. В MATLAB ниже порог входа, отсутствуют ссылки, а значит нет неявного изменения переменных, явно прописаны возвращаемые аргументы всех функций, классы отвечают принципу инкапсуляции. Python хорош тем, что этот язык программирования больше похож на язык программирования, имеет гораздо более широкий спектр применения, а разработчики на Python более универсальны. Он на порядок быстрее развивается, чем MATLAB.
В среде MATLAB есть очень крутой «хэлп» с описанием функций и множеством примеров. MATLAB не требует наличия интернета для установки дополнительных библиотек или изучения установленных функций - все пакеты уже есть на компьютере пользователя и подтягиваются без import’ов. Подходит для закрытых предприятий, где доступ в Интернет ограничен. А также для пользователей, кто не очень любит выбирать наиболее удобную библиотеку для проекта.
Какой итог?
Вообще говоря, переезд с MATLAB на Python является достаточно трудоемким, как и любые замены корневых модулей больших коммерческих проектов. Различия в синтаксисе не позволяют использовать продвинутые IDE для значительного ускорения переписывания. Таким образом, невозможно избежать погружения разработчика в суть работы кода. Кроме этого, обязательно нужно позаботиться о поддержке новоиспеченного модуля, команда может оказаться не готова быстро разрешать критические ситуации. Однако, Python в будущем может предоставить значительные перспективы развития: сделает проект независимым от политических событий и, конечно, удешевит его ввиду отсутствия необходимости приобретать лицензию.
Интересные ссылки на тему:
Андрей Богер, старший специалист отдела разработки