使用 Python 进行天文研究

作者:Joey Bernard

Python 如此强大的原因之一是,几乎任何事情你都可以找到一个模块。在本文中,我将介绍 Astropy,它最初由太空望远镜科学研究所开发,用于进行天文计算,例如图像处理和天文台计算。因为这是一个 Python 程序,你可以使用 pipeasy_install 来安装它。你的 Linux 发行版应该已经包含了一个软件包。例如,在基于 Debian 的发行版中,你可以使用以下命令安装它


sudo apt-get install python-astropy

还有一个单独的软件包 python-astropy-doc,其中包含 Astropy 的额外文档。由于 Astropy 是一个相当大的系统,它被分解为更小的子包。对于任何以前使用过 SciPy 或 NumPy 等软件包的人来说,这应该很熟悉。因此,仅仅使用以下命令实际上并没有太大用处


import astropy

你更可能需要导入单独的子包,使用如下命令


from astropy.io import fits

有用于处理文件 IO、宇宙学计算和坐标系等许多主题的子包。让我对一些可用的功能做一个基本的介绍,以便你了解你可以做什么。

首先,让我们看看如何处理数据文件。天体物理学和天文学中常用的文件格式是 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 文件。你可以使用 fitsheader 实用程序检查 FITS 文件的头部。你可以使用 fitscheck 检查你的 FITS 文件,你甚至可以使用 fitsdiff 找到两个文件之间的差异。

天文计算中常见的计算过程是图像处理。卷积子包提供了两类卷积运算:直接卷积和 FFT 卷积。你可以进行一维、二维和三维卷积。可视化子包处理更基本的图像处理,如归一化和拉伸。你可以非常容易地组合多个变换。“+”运算符被重载以应用“相加”在一起的串联变换。所以,像这样的命令


transform = SqrtStretch() + PercentileInterval(90.)

给你一个新的函数 transform,它在一个步骤中组合了两个单独的变换。这个子包还包含一个脚本 fits2bitmap,可以进行不同文件格式之间的转换。

天文计算中的第二个常见计算任务是基于观测进行统计,Astropy 提供了一个名为 stats 的子包。虽然 scipy.stats 子包提供了很多功能,但缺少一些以天文为中心的功能,因此 astropy.stats 子包填补了这些缺失的功能。

一旦你加载了数据,你就可以使用建模子包。你可以使用 astropy.modeling 进行一维和二维建模。这包括曲线拟合功能,你可以在其中进行线性和非线性函数拟合。有内置函数可以拟合高斯曲线和多项式。这种拟合是通过最小二乘法处理的。在 1.0 版本中,你可以通过使用算术运算符组合现有模型来构建复合模型。

当你准备开始进行计算时,你需要使用常数。Astropy 包含你在进行数值工作时需要的所有标准科学常数的完整列表,而不是记住它们或使用可能存在拼写错误的常数。你可以使用以下命令导入整个列表


from astropy import constants

如果你只需要一些常数,比如光速,你可以使用以下命令单独导入它们


from astropy.constants import c

关于这些常数真正酷的事情是,它们实际上是“Quantity”对象。这意味着你可以做一些事情,比如使用以下命令更改正在使用的单位


c.to('km/s')

由于 CGS 单位非常普遍,你可以使用 c.cgs

还有两个子包用于处理坐标系。天文坐标系由 coordinates 子包处理,世界坐标系由 wcs 子包处理。在 coordinates 子包中,核心对象是 SkyCoord 对象。此对象有多种方法可以处理坐标系之间的转换或从给定坐标系内的一个点到原点的距离。wcs 子包允许将 FITS 文件中的数据映射到“真实世界”坐标系中,以便正确分析它们。这包括处理复杂情况的功能,例如在天空球体上的投影。

你甚至可以使用 Astropy 进行宇宙学计算。cosmology 子包实际上包括根据你设置的一组初始条件来模拟整个宇宙演化的功能。虽然你可以设置自己的宇宙学,但有几种内置的宇宙学可用。这些是基于 WMAP 和 Planck 卫星数据。

大多数功能都建立在核心 FLRW 对象之上。该对象表示由广义相对论的 Friedmann-Lemaitre-Robertson-Walker 度量定义的均匀、各向同性宇宙学。但是,这个类不能直接使用。你需要先对其进行子类化。宇宙学子包中包含几个子类,例如包含暗能量的 FlatLambdaCDM 对象。你可以查看宇宙学演化过程中各个点的各种值,例如哈勃常数。你还可以包括来自物质、暗能量甚至光子和中微子的能量密度贡献。

既然你已经了解了一些你可以用 astropy 做的事情,如果天文计算在你的考虑范围内,那么还有更多可用的功能。此外,还有附属软件包的概念。这些软件包基本上建立在 Astropy 提供的核心功能之上。虽然它们不是 Astropy 的一部分,但它们正在被构建成一个社区驱动的环境,用于进行天体物理学研究。绝对值得你花时间看看扩展的可用软件包世界。

加载 Disqus 评论