mcpField
A
alterlab-astropy

alterlab-astropy

github.com/alterlab-ieu数据与数据库7870 次安装5 周前更新
代码仓库

关于 alterlab-astropy

alterlab-astropy 面向使用 Astropy 进行天文数据分析的研究者,涵盖坐标、单位、FITS 文件、宇宙学、时间、表格和图像 WCS 操作。

主要功能

  1. 01转换天球坐标系
  2. 02计算并转换物理单位
  3. 03读写 FITS 文件
  4. 04计算宇宙学距离和时间
  5. 05处理精确时间尺度与格式
  6. 06转换像素与世界坐标

适用场景

  1. 01转换星表位置的坐标系
  2. 02检查或修改 FITS 观测数据
  3. 03计算指定红移下的距离
  4. 04交叉匹配天文星表

安装

复制下面的命令,在终端中运行。

$npx skills add https://github.com/alterlab-ieu/alterlab-academic-skills --skill alterlab-astropy

安装后在 Claude Code 中输入/alterlab-astropy确认已加载。

包含的文件

除 SKILL.md 外,安装时一起下载的参考资料和脚本。

evals/
evals.json
references/
coordinates.md
cosmology.md
fits.md
tables.md
time.md
units.md
wcs_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")

最佳实践

  1. 始终使用单位:为数值附加单位,以避免错误并确保量纲一致
  2. 对 FITS 文件使用上下文管理器:确保正确关闭文件
  3. 优先使用数组而非循环:将多个坐标/时间作为数组处理,以获得更好的性能
  4. 检查坐标系:在进行变换前确认坐标系
  5. 使用合适的宇宙学模型:为分析选择正确的宇宙学模型
  6. 处理缺失数据:对于含缺失值的表格,使用带掩码的列
  7. 指定时间尺度:明确时间尺度(UTC、TT、TDB),以确保精确计时
  8. 对支持单位的表格使用 QTable:适用于表格列带有单位的情况
  9. 检查 WCS 有效性:使用变换前验证 WCS
  10. 缓存常用值:耗时的计算(例如宇宙学距离)可以缓存

文档和资源

参考文件

有关特定模块的详细信息:

  • 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 套件。

评论

支持 Markdown