[ PROMPT_NODE_26232 ]
units
[ SKILL_DOCUMENTATION ]
# 单位与量 (astropy.units)
`astropy.units` 模块用于处理物理量的定义、转换以及算术运算。
## 创建量 (Quantities)
将数值乘以或除以内置单位即可创建 Quantity 对象:
python
from astropy import units as u
import numpy as np
# 标量量
distance = 42.0 * u.meter
velocity = 100 * u.km / u.s
# 数组量
distances = np.array([1., 2., 3.]) * u.m
wavelengths = [500, 600, 700] * u.nm
通过 `.value` 和 `.unit` 属性访问组件:
python
distance.value # 42.0
distance.unit # Unit("m")
## 单位转换
使用 `.to()` 方法进行转换:
python
distance = 1.0 * u.parsec
distance.to(u.km) #
wavelength = 500 * u.nm
wavelength.to(u.angstrom) #
## 算术运算
Quantity 支持标准算术运算,并自动管理单位:
python
# 基本运算
speed = 15.1 * u.meter / (32.0 * u.second) #
area = (5 * u.m) * (3 * u.m) #
# 单位在适当情况下会抵消
ratio = (10 * u.m) / (5 * u.m) #
# 分解复杂单位
time = (3.0 * u.kilometer / (130.51 * u.meter / u.second))
time.decompose() #
## 单位系统
在主要单位系统之间转换:
python
# SI 转 CGS
pressure = 1.0 * u.Pa
pressure.cgs #
# 查找等效表示
(u.s ** -1).compose() # [Unit("Bq"), Unit("Hz"), ...]
## 等效性 (Equivalencies)
特定领域的转换需要使用等效性:
python
# 光谱等效性 (波长 ↔ 频率)
wavelength = 1000 * u.nm
wavelength.to(u.Hz, equivalencies=u.spectral())
#
# 多普勒等效性
velocity = 1000 * u.km / u.s
velocity.to(u.Hz, equivalencies=u.doppler_optical(500*u.nm))
# 其他等效性
u.brightness_temperature(500*u.GHz)
u.doppler_radio(1.4*u.GHz)
u.mass_energy()
u.parallax()
## 对数单位
用于星等、分贝和 dex 的特殊单位:
python
# 星等
flux = -2.5 * u.mag(u.ct / u.s)
# 分贝
power_ratio = 3 * u.dB(u.W)
# Dex (以 10 为底的对数)
abundance = 8.5 * u.dex(u.cm**-3)
## 常用单位
### 长度
`u.m, u.km, u.cm, u.mm, u.micron, u.angstrom, u.au, u.pc, u.kpc, u.Mpc, u.lyr`
### 时间
`u.s, u.min, u.hour, u.day, u.year, u.Myr, u.Gyr`
### 质量
`u.kg, u.g, u.M_sun, u.M_earth, u.M_jup`
### 温度