Astropy版本:5.0.1

Astropy作为天文方面最有名的Python库,包含了各种在天体物理研究中需要用到的工具。其功能繁多而全面,以致于我每次发现Astropy的新用法时总想感叹:“Astropy是万能的!”。借此系列笔记,我想整理一下使用Astropy过程中实现的各种功能,不求全面,但求实用。

推荐资料:

Astropy官方文档:Astropy Documentation — Astropy v5.0.1

China-VO对Astropy及Astropy Project的简单介绍:AstroPy 简介 :: 宇宙無窮 盈虛有數 (china-vo.org)

包括Astropy在内十几个天文Pyhton包的中文介绍:天文python应用包中文使用说明文档 《Usage Documentation of Astro-python》 - zhaoqtzt - 博客园 (cnblogs.com)(写得很全,推荐阅读!)

本文着重介绍利用Astropy获得常数及单位换算。

astropy.constant部分的官方文档:Constants (astropy.constants) — Astropy v5.0.1

在进行计算时,利用astropy.constant我们可以直接调用所需的常数:

1
2
3
4
5
6
7
>>>from astropy import constants as const
>>>print(const.c)
Name = Speed of light in vacuum
Value = 299792458.0
Uncertainty = 0.0
Unit = m / s
Reference = CODATA 2018

一般在天文计算中用到的是cgs单位制:

1
2
>>>print(const.c.cgs)
29979245800.0 cm / s

也可直接调用其数值或者单位:

1
2
3
4
>>>print(const.c.cgs.value)
29979245800.0
>>>print(const.c.cgs.unit)
cm / s

对于已知带量纲的变量,可直接转换为cgs单位制,但需要实现调用astropy.units注明量纲。

1
2
3
4
>>>from astropy import units as u
>>>m = 2 * 1e30 * u.kg
>>>print(m.cgs)
2.0000000000000002e+33 g

甚至可以取数值和换单位一起干了:

1
2
3
>>>m = 2 * 1e30 * u.kg
>>>print(m.to_value(u.g))
2.0000000000000002e+33

注意在计算时有量纲量与无量纲量不可直接进行加减,可进行乘除,否则会报错。

为了计算方便,还可以利用astropy.units自定义单位:

1
2
>>>kpc = 1000 * u.pc
>>>d = 100 * kpc

有时计算结果的单位需要化简:

1
2
3
4
5
>>M_J=((5*k_B*T)/(G*m_p))**(3/2) * (3/(4*math.pi*rho))**(1/2)
>>print(M_J)
>>print(M_J.decompose())
2.5645343480047463e+39 erg(3/2) s3 / (cm3 g(1/2))
2.5645343480047469e+36 kg

整体使用示例:

1
2
3
4
5
6
7
8
9
10
11
12
import math
from astropy import constants as const
from astropy import units as u
k_B = const.k_B.cgs
m_p = const.m_p.cgs
G = const.G.cgs
T = 3500 * u.Kelvin
rho = 3.68 * 1e-22 * u.g / u.cm**3

M_J=((5*k_B*T)/(G*m_p))**(3/2) * (3/(4*math.pi*rho))**(1/2)
print(M_J.decompose())#单位化简
print(M_J.decompose().to_value(u.g))