astropy

分类编程
作者Agentic Awesome Skills 社区
许可BSD-3-Clause license
评分4.20/5
使用5.4K

Astropy

概述

Astropy 是天文学的核心 Python 软件包,为天文研究和数据分析提供基础功能。你可以使用 astropy 进行坐标转换、单位与量计算、FITS 文件操作、宇宙学计算、精确时间处理、表格数据操作以及天文图像处理。

何时使用此技能

当任务涉及以下内容时,请使用 astropy:

  • 天球坐标系之间的转换(ICRS, Galactic, FK5, AltAz 等)

  • 处理物理单位和量(例如将 Jy 转换为 mJy,秒差距转换为公里等)

  • 读取、写入或操作 FITS 文件(图像或表格)

  • 宇宙学计算(光度距离、回溯时间、哈勃参数)

  • 处理不同时间尺度(UTC, TAI, TT, TDB)和格式(JD, MJD, ISO)的精确时间

  • 表格操作(读取目录、交叉匹配、过滤、连接)

  • 像素坐标与世界坐标之间的 WCS 转换

  • 天文常数及相关计算

快速上手

python
import astropy.units as u
from astropy.coordinates import SkyCoord
from astropy.time import Time
from astropy.io import fits
from astropy.table import Table
from astropy.cosmology import Planck18

单位与量

distance = 100 * u.pc distance_km = distance.to(u.km)

坐标

coord = SkyCoord(ra=10.5*u.degree, dec=41.2*u.degree, frame='icrs') coord_galactic = coord.galactic

时间

t = Time('2023-01-15 12:30:00') jd = t.jd # 儒略日

FITS 文件

data = fits.getdata('image.fits') header = fits.getheader('image.fits')

表格

table = Table.read('catalog.fits')

宇宙学

d_L = Planck18.luminosity_distance(z=1.0)

核心能力

1. 单位与量 (astropy.units)

处理带有单位的物理量,执行单位转换,并确保计算中的量纲一致性。

关键操作:

  • 通过数值乘以单位创建量 (Quantity)

  • 使用 .to() 方法在单位之间进行转换

  • 执行带有自动单位处理的算术运算

  • 使用等效性 (equivalencies) 进行特定领域的转换(光谱、多普勒、视差)

  • 处理对数单位(星等、分贝)

参阅: references/units.md 以获取关于单位系统、等效性、性能优化和单位算术的详细文档。

2. 坐标系统 (astropy.coordinates)

表示天体位置并在不同坐标系之间进行转换。

关键操作:

  • 使用 SkyCoord 在任何坐标系(ICRS, Galactic, FK5, AltAz 等)中创建坐标

  • 在不同坐标系之间进行转换

  • 计算角距离和位置角

  • 将坐标与目录进行匹配

  • 为 3D 坐标操作添加距离信息

  • 处理自行 (proper motions) 和径向速度

  • 从在线数据库查询命名天体

参阅: references/coordinates.md 以获取详细的坐标系描述、转换、依赖观测者的坐标系 (AltAz)、目录匹配和性能优化技巧。

3. 宇宙学计算 (astropy.cosmology)

使用标准宇宙学模型进行宇宙学计算。

关键操作:

  • 使用内置的宇宙学模型(Planck18, WMAP9 等)

  • 创建

自定义宇宙学模型
  • 计算距离(亮度距离、共动距离、角直径距离)

  • 计算年龄和回溯时间

  • 确定任意红移处的哈勃参数

  • 计算密度参数和体积

  • 执行反向计算(根据给定距离求红移 z)

参阅: references/cosmology.md 以了解可用模型、距离计算、时间计算、密度参数及中微子效应。

4. FITS 文件处理 (astropy.io.fits)

读取、写入和操作 FITS(灵活图像传输系统)文件。

核心操作:

  • 使用上下文管理器打开 FITS 文件

  • 通过索引或名称访问 HDU(标头数据单元)

  • 读取和修改标头(关键字、注释、历史记录)

  • 处理图像数据(NumPy 数组)

  • 处理表格数据(二进制和 ASCII 表格)

  • 创建新 FITS 文件(单扩展或多扩展)

  • 对大文件使用内存映射

  • 访问远程 FITS 文件(S3, HTTP)

参阅: references/fits.md 以获取全面的文件操作、标头处理、图像与表格处理、多扩展文件及性能考量。

5. 表格操作 (astropy.table)

处理支持单位、元数据和多种文件格式的表格数据。

核心操作:

  • 从数组、列表或字典创建表格

  • 以多种格式读写表格(FITS, CSV, HDF5, VOTable)

  • 访问和修改列与行

  • 对表格进行排序、过滤和索引

  • 执行数据库风格的操作(连接、分组、聚合)

  • 堆叠和拼接表格

  • 使用支持单位的列 (QTable)

  • 通过掩码处理缺失数据

参阅: references/tables.md 以了解表格创建、I/O 操作、数据处理、排序、过滤、连接、分组及性能技巧。

6. 时间处理 (astropy.time)

精确的时间表示以及时间尺度与格式之间的转换。

核心操作:

  • 以多种格式创建 Time 对象(ISO, JD, MJD, Unix 等)

  • 在不同时间尺度之间转换(UTC, TAI, TT, TDB 等)

  • 使用 TimeDelta 进行时间算术运算

  • 为观测者计算恒星时

  • 计算光行时修正(质心、日心)

  • 高效处理时间数组

  • 处理掩码(缺失)时间

参阅: references/time.md 以了解时间格式、时间尺度、转换、算术运算、观测特性及精度处理。

7. 世界坐标系 (astropy.wcs)

在图像像素坐标与世界坐标之间进行转换。

核心操作:

  • 从 FITS 标头读取 WCS

  • 将像素坐标转换为世界坐标(反之亦然)

  • 计算图像足迹 (footprints)

  • 访问 WCS 参数(参考像素、投影、比例)

  • 创建自定义 WCS 对象

参阅: references/wcs_and_other_modules.md 以了解 WCS 操作与转换。

其他功能

references/wcs_and_other_modules.md 文件还涵盖了:

NDData 和 CCDData

包含元数据、不确定度、掩码和 WCS 信息的 n 维数据集容器。

Modeling (建模)

用于为天文数据创建和拟合数学模型的框架。

Visualization (可视化)

用于天文图像显示、拉伸和缩放的工具。

Constants (常量)

带有正确单位的物理和天文常量(光速、太阳质量、普朗克常数等)。

Convolution (卷积)

用于平滑和滤波的图像处理核。

Statistics (统计)

鲁棒的统计函数,包括 sigma 裁剪和离群值剔除。

安装

bash
# Instal
bash
uv pip install astropy

安装包含所有可选依赖的完整版本

uv pip install astropy[all]

常用工作流

坐标系转换

python
from astropy.coordinates import SkyCoord
import astropy.units as u

创建坐标

c = SkyCoord(ra='05h23m34.5s', dec='-69d45m22s', frame='icrs')

转换为银道坐标

c_gal = c.galactic print(f"l={c_gal.l.deg}, b={c_gal.b.deg}")

转换为地平坐标(需要时间与位置信息)

from astropy.time import Time from astropy.coordinates import EarthLocation, AltAz

observing_time = Time('2023-06-15 23:00:00')
observing_location = EarthLocation(lat=40*u.deg, lon=-120*u.deg)
aa_frame = AltAz(obstime=observing_time, location=observing_location)
c_altaz = c.transform_to(aa_frame)
print(f"Alt={c_altaz.alt.deg}, Az={c_altaz.az.deg}")

读取与分析 FITS 文件

python
from astropy.io import fits
import numpy as np

打开 FITS 文件

with fits.open('observation.fits') as hdul: # 显示结构 hdul.info()

# 获取图像数据和文件头
data = hdul[1].data
header = hdul[1].header

# 访问文件头数值
exptime = header['EXPTIME']
filter_name = header['FILTER']

# 分析数据
mean = np.mean(data)
median = np.median(data)
print(f"Mean: {mean}, Median: {median}")

宇宙学距离计算

python
from astropy.cosmology import Planck18
import astropy.units as u
import numpy as np

计算 z=1.5 时的距离

z = 1.5 d_L = Planck18.luminosity_distance(z) d_A = Planck18.angular_diameter_distance(z)

print(f"Luminosity distance: {d_L}")
print(f"Angular diameter distance: {d_A}")

该红移时的宇宙年龄

age = Planck18.age(z) print(f"Age at z={z}: {age.to(u.Gyr)}")

回溯时间

t_lookback = Planck18.lookback_time(z) print(f"Lookback time: {t_lookback.to(u.Gyr)}")

星表交叉匹配

python
from astropy.table import Table
from astropy.coordinates import SkyCoord, match_coordinates_sky
import astropy.units as u

读取星表

cat1 = Table.read('catalog1.fits') cat2 = Table.read('catalog2.fits')

创建坐标对象

coords1 = SkyCoord(ra=cat1['RA']*u.degree, dec=cat1['DEC']*u.degree) coords2 = SkyCoord(ra=cat2['RA']*u.degree, dec=cat2['DEC']*u.degree)

寻找匹配项

idx, sep, _ = coords1.match_to_catalog_sky(coords2)

根据分离度阈值进行过滤

max_sep = 1 * u.arcsec matches = sep < max_sep

创建匹配后的星表

cat1_matched = cat1[matches] cat2_matched = cat2[idx[matches]] print(f"Found {len(cat1_matched)} matches")

最佳实践

1. 始终使用单位:为数值附加单位以避免错误并确保量纲一致。
2. 对 FITS 文件使用上下文管理器:确保文件能被正确关闭。
3. 优先使用数组而非循环:以数组形式处理多个坐标或时间以提高性能。
4. 检查坐标系:在转换前验证坐标系。
5. 使用合适的宇宙学模型:根据分析需求选择正确的宇宙学模型。
6. 处理缺失数据:对于含有缺失值的表格,使用掩码列(masked columns)。
7. 明确指定时间尺度:对于精确计时,请明确指定时间尺度(如 UTC, TT, TDB)。
8. 使用 QTable 处理带单位的表格:当表格列具有单位时,请使用 QTable
9. 验证 WCS 有效性:在进行转换前验证 WCS(世界坐标系统)。
10. 缓存频繁使用的数据:对高开销计算(如宇宙学距离)进行缓存。

文档与资源

  • 官方文档
  • Astropy 文档:https://docs.astropy.org/en/stable/
  • 教程:https://learn.astropy.org/
  • GitHub:https://github.com/astropy/astropy

参考文件

有关特定模块的详细信息,请参阅:

  • references/units.md - 单位、量、转换与等效性

  • references/coordinates.md - 坐标系、转换与星表匹配

  • references/cosmology.md - 宇宙学模型与计算

  • references/fits.md - FITS 文件操作与处理

  • references/tables.md - 表格创建、I/O 与操作

  • references/time.md - 时间格式、标度与计算

  • references/wcs_and_other_modules.md - WCS、NDData、建模、可视化、常量及实用工具

局限性

  • 仅在任务明确符合上述范围时使用此技能。
  • 不要将输出结果视为针对特定环境的验证、测试或专家评审的替代方案。
  • 如果缺少必要的输入、权限、安全边界或成功标准,请停止操作并请求澄清。