Рубрики
Без рубрики

Черные дыры и питон

Автор оригинала: Arun Ravindran.

Черная дыра в M87 – Изображение предоставлено BBC

Первое изображение черной дыры, вероятно, является одним из самых захватывающих достижений в мире науки. Размытое кольцо огненно-оранжевого цвета может показаться несложным. Фактически, это потребовало многолетних усилий международной группы ученых, в том числе специалистов по информатике.

Читая отчет, я восхищаюсь той ролью, которую Python сыграл в этом начинании. Это интересно, потому что, когда мы говорим о научном открытии, мы обычно говорим о людях – ученых, которые совершили прыжки интуиции и обнаружили корреляции, которых не было ни у кого другого. Но технологии играют все более важную роль в открытиях, просеивая огромные объемы данных и извлекая ценные сведения.

Популярность Python в научных вычислениях не станет неожиданностью для большинства программистов на Python сегодня. Но еще в 2009 году, когда я посетил первый PyCon India в IISc Bangalore, я был удивлен, увидев доклады по экспериментальной физике и моделированию жидкостей. Когда я спросил профессора Прабху о том, почему Python так популярен в научных вычислениях, он ответил: «Он очень доступен. нам – непрограммистам ».

Случайно просматривая программное обеспечение, используемое астрономами, вы найдете упоминания о библиотеках Python, таких как Numpy, Scipy, Matplotlib, Pandas и Jupyter. Примечательно, что целые проекты, такие как eht-python , написаны только на Python. Python – это не просто язык выбора, это язык научных вычислений.

Тем не менее, если подумать, есть языки программирования лучше, будь то с точки зрения скорости, безопасности типов или краткости. Но Python преодолевает эти ограничения и иногда преуспевает из-за некоторых прагматичных языковых дизайнерских решений.

Скорость можно делегировать

Как ни странно, простой код Python может очень плохо работать для задач с интенсивными вычислениями. Но библиотеки, такие как NumPy, де-факто, когда дело доходит до любой формы обработки чисел. Он предоставляет объект N-мерного массива с несколькими высокоуровневыми операциями, такими как перекрестное произведение или транспонирование. Механизм C библиотеки ускоряет эти операции почти до чистой скорости машины.

В первые дни Python ожидалось, что части, требующие высокой производительности, будут написаны на других языках, таких как C или FORTRAN, и для их вызова будет использоваться интерфейс оболочки. Со временем изобилие библиотек, таких как NumPy, сделало ненужным писать какой-либо собственный код C. Зачем изобретать велосипед, если его можно просто «импортировать» и использовать?

Библиотеки, которые хорошо работают

плотность импорта – обязательно XKCD 353

Работа со сторонними библиотеками C не для слабонервных. В 2002 году, когда я адаптировал алгоритм в статье для своего проекта по сжатию изображений на основе вейвлетов, я усвоил это на собственном горьком опыте. Нам нужно было использовать существующую библиотеку быстрого преобразования Фурье, написанную на C.

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

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

Библиотеки Python имеют тенденцию составлять довольно хорошо (в то время как библиотеки C этого не делают ). Отчасти это связано с динамической типизацией и автоматическим управлением памятью, но лично я считаю, что это в основном из-за хороших соглашений. Большинство идиом Python хорошо документированы , и это приводит к минимуму сюрпризов. Например, не одобряется иерархия глубоко вложенных классов, потому что «плоский – лучше».

Интерактивное исследование

Исследования носят исследовательский характер. Мы не знаем, что можем найти. Даже если мы это сделаем, мы не можем ждать целую вечность, чтобы узнать, потому что, возможно, мы идем в тупик. Интерактивный интерфейс – ключевой инструмент исследователя или ученого. Ноутбук Jupyter близок к идеалу с его живым кодом и встроенными возможностями визуализации.

Если вам нужно попробовать вычисление с другим набором параметров, вы можете вызвать его и просмотреть результаты. Даже нарисуйте это, чтобы лучше визуализировать. Затем вы можете взять результаты и передать их другому вычислению. Эта записанная стенограмма представляет собой ценный конвейер данных, который может быть воспроизведен другим пользователем для проверки или с другим набором наблюдений.

Если задуматься, диалоговый интерфейс может быть более доступным для непрограммиста. Алан Кей был очень впечатлен ранней интерактивной средой программирования под названием JOSS , разработанной в RAND, которая понравилась экономистам. Мне приятно, что он ответил на любую команду , которую не понял, с помощью «А?» или “ИЗВИНИТЕ”.

Представьте себе использование современной технологии распознавания голоса для создания виртуального помощника для ученых. Учитывая, что большая часть науки (особенно физики) связана с математикой, составление сложных уравнений может быстро утомить. Слушать таблицы с цифрами тоже неинтересно. Так что, если разговор не продвигается с использованием удивительного уровня искусственного интеллекта (представьте себе ответ вроде “Я провел симуляции на каждый известный элемент, и ни один из них не может служить жизнеспособной заменой палладиевого сердечника »), мы, вероятно, застряли на текущих интерфейсах.

Будущее Python

Кэти Боуман, одна из ключевых участниц, с потрясающим объемом данных

Проект M87 EHT включал обработку петабайт информации (которая общедоступна ). В будущем они планируют добавить новые телескопы, увеличив объем данных на порядки. В общем, вычислительные потребности науки будут продолжать расти и даже выходить в новые области. Вопрос в том, будет ли Python поддерживать или заменяться?

У Python сильная экосистема с сотнями библиотек. Другому языку будет сложно воспроизвести это. Это очень простой язык для освоения. Читаемость настолько хороша, что код Python часто сравнивают с псевдокодом. Я считаю, что это изменило представление о том, как должен выглядеть код. Любой новый язык должен иметь такую же или лучшую читаемость, чтобы стимулировать переход.

Хотя есть несколько других многообещающих языков, таких как Julia или Rust, я уверен, что Python еще долго останется любимым языком программирования ученых. Несмотря на свои ограничения, Python нашел золотую середину между простотой и мощностью.

С каждым годом технический прогресс ускоряется. Это может привести к прогрессу человечества, если мы сможем сделать технологии более доступными. Нам нужны физики, математики, биологи, экономисты, фермеры и так далее, чтобы использовать дешевые вычислительные мощности для создания лучших вещей.

Python действительно играет важную роль, делая кодирование менее пугающим и более совместным. Вот почему я верю, что вы увидите это в привлечении большего числа людей к компьютерам и в участии в большем числе будущих прорывов.