用 Astropy 进行单位换算

有公式如下,如何得到右边那个等式呢?

$$M ( r_{h,3D} ) \simeq \frac{4 \sigma_{\rm{los}}^{2} r_{h}}{G} =0.93 \left( \frac{\sigma_{\rm{los}}}{km/s} \right)^{2} \frac{r_{h}}{kpc} \times 10^{6} M_{\odot}$$

astropyastropy.units 包含了物理和天文中的常用单位,而 astropy.costants 有各种常数。
两行式子就解决啦,一行导入,一行计算。很简单吧?

>>> from astropy import constants as c, units as u
>>> (4*(u.km/u.s)**2*u.kpc/c.G).to(1e6*u.solMass)
<Quantity 0.9297755651520015 1e+06 solMass>

再来一个例子,以 1km/s 的速度走 1Gyr,能走多远?

>>> (1*u.km/u.s*u.Gyr).to(u.kpc)
<Quantity 1.0227121650537077 kpc>

嗯,差不多正好 1kpc 呢。

注意了,用 to 转换前如果带数字或者物理学常数,返回的结果是一个物理量;否则就是纯粹的单位换算,结果不带量纲。比如下面这样:

>>> (u.km/u.s*u.Gyr).to(u.kpc)
1.0227121650537077

标签: scipy, astropy

赞 (13)

添加新评论