Наши партнеры

UnixForum





Библиотека сайта rus-linux.net

Астрономические вычисления на языке Python

Оригинал: Doing Astronomy with Python
Автор: Joey Bernard
Дата публикации: 19 августа 2015 г.
Перевод: A.Панин
Дата перевода: 15 октября 2015 г.

Одна из особенностей языка программирования Python, которая делает его настолько мощным, заключается в наличии большого количества подходящих практически для любых целей модулей. В данной статье я расскажу о модуле Astropy, который был разработан сотрудниками Института исследований космоса с помощью космического телескопа (Space Telescope Science Institute) для выполнения астрономических расчетов, обработки изображений и выполнения обсерваторных расчетов. Ввиду того, что рассматриваемый модуль является модулем языка программирования Python, вы можете установить его либо с помощью команды pip, либо с помощью команды easy_install. В репозитории вашего дистрибутива Linux также должен быть пакет с данным модулем. Например, в дистрибутивах на основе дистрибутива Debian вы можете установить данный модуль с помощью следующей команды:

sudo apt-get install python-astropy

Также в репозитории данного дистрибутива имеется отдельный пакет под названием python-astropy-doc, который содержит дополнительную документацию модуля Astropy. Так как модуль Astropy является достаточно многофункциональным, он нередко разделяется на отдельные подмодули. С ними должны быть знакомы все те, кто ранее работал с такими пакетами, как SciPy или NumPy. Таким образом, простое использование следующей директивы в большинстве случаев не является достаточным:

import astropy

Скорее всего, вам придется импортировать отдельные подмодули с помощью директив, аналогичных следующей:

from astropy.io import fits

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

В первую очередь рассмотрим функции для работы с файлами данных. Наиболее часто используемым форматом файлов данных в астрофизике и астрономии является формат FITS. Модуль PyFITS языка Python был разработан специально для чтения и записи файлов формата FITS. Код данного модуля практически не отличается от кода подмодуля astropy.io.fits, поэтому вы можете использовать подмодуль аналогичным образом. На самом деле, вы можете использовать код из модуля Astropy в качестве плагина с помощью следующей директивы:

from astropy.io import fits as pyfits

Таким образом вы можете задействовать существующий код для работы с файлами без необходимости внесения каких-либо изменений.

Для работы с файлом данных в первую очередь необходимо открыть этот файл с помощью следующего кода:

from astropy.io import fits
hdulist = fits.open("My_File.fit")

В результате будет возвращен объект, очень похожий на список. Каждый элемент возвращенного объекта будет связан с фрагментом, содержащим заголовок и данные (Header-Data Unit - HDU) открытого файла. Вы можете получить дополнительную информацию о файле с помощью следующего вызова:

hdulist.info()

Каждый из отдельных элементов объекта состоит из заголовка и набора данных. Вы можете получить доступ к ним для ознакомления с дополнительной информацией о данных, которые вы собираетесь обрабатывать.

Наряду с библиотечными функциями, модуль Astropy содержит набор утилит с интерфейсом командной строки, предназначенных для работы с файлами формата FITS. Вы можете проверить корректность заголовков файла формата FITS с помощью утилиты fitsheader. Также вы можете проверить корректность всего файла FITS с помощью утилиты fitscheck или даже найти различия между двумя файлами данного формата с помощью утилиты fitsdiff.

Стандартный процесс астрономических расчетов связан с обработкой изображений. Подмодуль convolution позволяет осуществлять операции свертывания изображений двух типов: прямое свертывание и FFT. Вы можете выполнять одно-, двух- и трехмерное свертывание изображений. Подмодуль visualization предназначен для выполнения более простых преобразований изображений, таких, как нормализация и растяжение. Также вы можете достаточно просто комбинировать множество преобразований. Оператор + перегружается для того, чтобы у разработчика была возможность "добавления" множества операций преобразования изображений. Следовательно, вызов, аналогичный

transform = SqrtStretch() + PercentileInterval(90.)

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

Второй наиболее частой операцией, связанной с астрономическими расчетами, является сбор статистических данных на основе наблюдений, для осуществления которого Astropy предоставляет подмодуль под названием stats. Несмотря на то, что известный подмодуль scipy.stats реализует множество функций для обработки статистических данных, в нем отсутствуют некоторые функции, связанные с астрономией, а подмодуль astropy.stats как раз реализует именно эти отсутствующие функции.

После того, как вы загрузите ваши данные, вы можете использовать подмодуль modeling для моделирования. С помощью подмодуля astropy.modeling может осуществляться одномерное и двухмерное моделирование. Данный модуль поддерживает функции аппроксимации, с помощью которых можно осуществлять линейную и нелинейную аппроксимацию. Имеются встроенные функции для работы с кривыми Гаусса и полиномами. При этом используется метод наименьших квадратов. Начиная с версии 1.0 вы можете строить сложные модели путем комбинирования существующих моделей с использованием арифметических операторов.

Когда вы будете готовы начать расчеты, вам потребуются различные константы. Для того, чтобы избежать их запоминания и не всегда корректного ввода, Astropy предлагает полный набор стандартных научных констант, которые могут понадобиться в процессе выполнения расчетов. Вы можете импортировать весь набор с помощью следующей директивы:

from astropy import constants

Если вам нужны лишь некоторые из этих констант, такие, как скорость света, вы можете импортировать их по отдельности с помощью следующей директивы:

from astropy.constants import c

Действительно полезной особенностью данных констант является то, что на самом деле они представлены "количественными" объектами. Это означает, что вы можете выполнять такие операции, как изменение используемых единиц измерения с помощью аналогичных вызовов:

c.to('km/s')

Ввиду распространенности, вы можете использовать систему единиц СГС с помощью следующего вызова c.cgs.

Также имеются еще два подпакета, предназначенные для работы с системами координат. Для работы с астрономическими системами координат предназначен подмодуль coordianates, а с мировой системой координат - модуль wcs. Основным объектом подмодуля coordinates является объект SkyCoord. Методы данного объекта предназначены для осуществления преобразований между координатными системами и вычисления дистанции от удаленной точки до точки отсчета в рамках заданной системы координат. Подмодуль wcs позволяет связывать данные из файла формата FITS с точками "реальной мировой" системы координат для их корректного анализа. Данные механизмы подразумевают возможность обработки сложных случаев, таких, как исследование проекций небесную сферу.

С помощью Astropy вы можете производить даже космологические расчеты. Подмодуль cosmology на самом деле включает функции для моделирования процесса эволюции всего космоса на основе заданных разработчиком начальных условий. Несмотря на то, что вы можете использовать свои космологические модели, вам будут доступны несколько готовых космологических моделей. Эти модели являются результатом работы проектов WMAP и Planck satellite data.

Большая часть соответствующих функций реализована в рамках основного объекта FLRW. Данный объект представляет гомогенную изотропную модель вселенной Фридмана - Леметра - Робертсона - Уокера на основе общей теории относительности. Однако, данный класс не может использоваться напрямую. Перед его использованием вам придется создать собственный подкласс. В рамках подмодуля cosmology существует несколько подклассов данного класса, таких, как класс FlatLambdaCDM, который учитывает темную энергию. Вы можете ознакомиться с различными константами, такими, как константа Хаббла, в процессе работы с космологической моделью. Также вы можете учитывать приращение плотности энергии за счет материи, темной энергии и даже фотонов и нейтрино.

Теперь вы знаете немного больше о том, каким образом вы можете использовать модуль astropy при возникновении необходимости в осуществлении астрономических вычислений, хотя об этом модуле можно говорить гораздо дольше. Кроме того, не стоит забывать о концепции связанных модулей. Это модули, которые созданы на основе основных функций модуля Astropy. Хотя эти модули и не являются частью Astropy, они разрабатываются сообществом разработчиков с целью выполнения астрофизических вычислений. Вам определенно стоит ознакомиться со всей номенклатурой доступных модулей с соответствующими функциями.