关于 alterlab-astropy
alterlab-astropy 面向使用 Astropy 进行天文数据分析的研究者,涵盖坐标、单位、FITS 文件、宇宙学、时间、表格和图像 WCS 操作。
主要功能
- 01转换天球坐标系
- 02计算并转换物理单位
- 03读写 FITS 文件
- 04计算宇宙学距离和时间
- 05处理精确时间尺度与格式
- 06转换像素与世界坐标
适用场景
- 01转换星表位置的坐标系
- 02检查或修改 FITS 观测数据
- 03计算指定红移下的距离
- 04交叉匹配天文星表
安装
复制下面的命令,在终端中运行。
npx skills add https:/ / github.com/ alterlab-ieu/ alterlab-academic-skills --skill alterlab-astropy安装后在 Claude Code 中输入/alterlab-astropy确认已加载。
包含的文件
除 SKILL.md 外,安装时一起下载的参考资料和脚本。
evals/evals.jsonreferences/coordinates.mdcosmology.mdfits.mdtables.mdtime.mdunits.mdwcs_and_other_modules.md详细介绍
Astropy
概述
Astropy 是面向天文学的核心 Python 软件包,为天文研究和数据分析提供基本功能。使用 astropy 进行坐标转换、单位和物理量计算、FITS 文件操作、宇宙学计算、精确时间处理、表格数据操作和天文图像处理。
何时使用此技能
在任务涉及以下内容时使用 astropy:
- 在天球坐标系(ICRS、Galactic、FK5、AltAz 等)之间转换
- 处理物理单位和物理量(将 Jy 转换为 mJy、将秒差距转换为 km 等)
- 读取、写入或操作 FITS 文件(图像或表格)
- 宇宙学计算(光度距离、回望时间、哈勃参数)
- 使用不同时间尺度(UTC、TAI、TT、TDB)和格式(JD、MJD、ISO)进行精确时间处理
- 表格操作(读取星表、交叉匹配、筛选、合并)
- 像素坐标和世界坐标之间的 WCS 转换
- 天文常数和计算
不适用的场景
| 场景 | 请改用 |
|---|---|
| 陆地 GIS——shapefile、地图投影(EPSG)、缓冲区、空间连接 | alterlab-geopandas |
| 卫星/地球观测栅格、DEM、光谱指数 | alterlab-geomaster |
| 物理公式的符号推导(不涉及数据或单位处理) | alterlab-sympy |
| 对作为普通数组的光变曲线进行通用时间序列 ML(分类、预测) | alterlab-aeon |
快速开始
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
# Units and quantities
distance = 100 * u.pc
distance_km = distance.to(u.km)
# Coordinates
coord = SkyCoord(ra=10.5*u.degree, dec=41.2*u.degree, frame='icrs')
coord_galactic = coord.galactic
# Time
t = Time('2023-01-15 12:30:00')
jd = t.jd # Julian Date
# FITS files
data = fits.getdata('image.fits')
header = fits.getheader('image.fits')
# Tables
table = Table.read('catalog.fits')
# Cosmology
d_L = Planck18.luminosity_distance(z=1.0)
核心功能
1. 单位和物理量(astropy.units)
处理带单位的物理量、进行单位转换,并确保计算中的量纲一致性。
主要操作:
- 将数值与单位相乘以创建物理量
- 使用
.to()方法在单位之间转换 - 执行自动处理单位的算术运算
- 使用特定领域的等价关系进行转换(光谱、多普勒、视差)
- 处理对数单位(星等、分贝)
参见: references/units.md,了解全面的文档、单位系统、等价关系、性能优化和单位运算。
2. 坐标系(astropy.coordinates)
表示天体位置并在不同坐标系之间转换。
主要操作:
- 使用
SkyCoord在任意坐标系(ICRS、Galactic、FK5、AltAz 等)中创建坐标 - 在坐标系之间转换
- 计算角距离和位置角
- 将坐标与星表匹配
- 纳入距离以进行 3D 坐标运算
- 处理自行和视向速度
- 从在线数据库查询命名天体
参见: 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)
精确表示时间,并在不同时间尺度和格式之间进行转换。
主要操作:
- 以多种格式(ISO、JD、MJD、Unix 等)创建 Time 对象
- 在不同时间尺度(UTC、TAI、TT、TDB 等)之间转换
- 使用 TimeDelta 执行时间运算
- 计算观测者的恒星时
- 计算光行时修正(重心、日心)
- 高效处理时间数组
- 处理带掩码的(缺失)时间
参见: references/time.md,了解时间格式、时间尺度、转换、运算、观测功能及精度处理。
7. 世界坐标系(astropy.wcs)
在图像的像素坐标与世界坐标之间进行转换。
主要操作:
- 从 FITS 头信息读取 WCS
- 将像素坐标转换为世界坐标(反之亦然)
- 计算图像覆盖范围
- 访问 WCS 参数(参考像素、投影、比例尺)
- 创建自定义 WCS 对象
参见: references/wcs_and_other_modules.md,了解 WCS 操作和转换。
其他功能
references/wcs_and_other_modules.md 文件还介绍了:
NDData 和 CCDData
用于容纳 n 维数据集的容器,支持元数据、不确定性、掩码和 WCS 信息。
建模
用于创建数学模型并将其拟合到天文数据的框架。
可视化
用于显示天文图像的工具,支持适当的拉伸和缩放。
常量
带有适当单位的物理和天文常数(光速、太阳质量、普朗克常数等)。
卷积
用于平滑和滤波的图像处理内核。
统计
稳健的统计函数,包括 sigma 裁剪和异常值剔除。
安装
# Install astropy (8.x requires Python >= 3.11 and NumPy >= 2.0; current 8.0.x as of 2026-09)
uv pip install astropy
# Common optional dependencies (scipy, matplotlib, ...) or everything
uv pip install "astropy[recommended]"
uv pip install "astropy[all]"
Astropy 8.0 说明:请直接从 astropy.cosmology 导入宇宙学类(astropy.cosmology.flrw / .core / .funcs 兼容模块已移除),astropy.samp 已移至 pyvo.samp,默认 CODATA 常数现为 2022 版,且 FITS 字符串列默认会去除尾随空格(设置 strip_spaces=False 可恢复旧行为)。如果必须使用 NumPy 1.x,请固定 astropy<8(7.2.x 系列)。
常见工作流
在不同坐标系之间转换坐标
from astropy.coordinates import SkyCoord
import astropy.units as u
# Create coordinate
c = SkyCoord(ra='05h23m34.5s', dec='-69d45m22s', frame='icrs')
# Transform to galactic
c_gal = c.galactic
print(f"l={c_gal.l.deg}, b={c_gal.b.deg}")
# Transform to alt-az (requires time and location)
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 文件
from astropy.io import fits
import numpy as np
# Open FITS file
with fits.open('observation.fits') as hdul:
# Display structure
hdul.info()
# Get image data and header
data = hdul[1].data
header = hdul[1].header
# Access header values
exptime = header['EXPTIME']
filter_name = header['FILTER']
# Analyze data
mean = np.mean(data)
median = np.median(data)
print(f"Mean: {mean}, Median: {median}")
宇宙学距离计算
from astropy.cosmology import Planck18
import astropy.units as u
import numpy as np
# Calculate distances at 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 of universe at that redshift
age = Planck18.age(z)
print(f"Age at z={z}: {age.to(u.Gyr)}")
# Lookback time
t_lookback = Planck18.lookback_time(z)
print(f"Lookback time: {t_lookback.to(u.Gyr)}")
星表交叉匹配
from astropy.table import Table
from astropy.coordinates import SkyCoord, match_coordinates_sky
import astropy.units as u
# Read catalogs
cat1 = Table.read('catalog1.fits')
cat2 = Table.read('catalog2.fits')
# Create coordinate objects
coords1 = SkyCoord(ra=cat1['RA']*u.degree, dec=cat1['DEC']*u.degree)
coords2 = SkyCoord(ra=cat2['RA']*u.degree, dec=cat2['DEC']*u.degree)
# Find matches
idx, sep, _ = coords1.match_to_catalog_sky(coords2)
# Filter by separation threshold
max_sep = 1 * u.arcsec
matches = sep < max_sep
# Create matched catalogs
cat1_matched = cat1[matches]
cat2_matched = cat2[idx[matches]]
print(f"Found {len(cat1_matched)} matches")
最佳实践
- 始终使用单位:为数值附加单位,以避免错误并确保量纲一致
- 对 FITS 文件使用上下文管理器:确保正确关闭文件
- 优先使用数组而非循环:将多个坐标/时间作为数组处理,以获得更好的性能
- 检查坐标系:在进行变换前确认坐标系
- 使用合适的宇宙学模型:为分析选择正确的宇宙学模型
- 处理缺失数据:对于含缺失值的表格,使用带掩码的列
- 指定时间尺度:明确时间尺度(UTC、TT、TDB),以确保精确计时
- 对支持单位的表格使用 QTable:适用于表格列带有单位的情况
- 检查 WCS 有效性:使用变换前验证 WCS
- 缓存常用值:耗时的计算(例如宇宙学距离)可以缓存
文档和资源
- Astropy 官方文档:https://docs.astropy.org/en/stable/
- 教程:https://learn.astropy.org/
- GitHub:https://github.com/astropy/astropy
- 8.0 版新增内容:https://docs.astropy.org/en/stable/whatsnew/8.0.html
参考文件
有关特定模块的详细信息:
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、建模、可视化、常量和实用工具
属于 AlterLab Academic Skills 套件。