mcpField
A
astropy

astropy

github.com/kalarislabs其他7340 次安装3 天前更新
代码仓库

关于 astropy

Astropy 技能为天文学研究与数据分析提供 Python 工具,适用于处理观测数据、天体坐标和物理量。其能力涵盖 FITS、时间、表格、宇宙学计算及像素与天球坐标转换。

主要功能

  1. 01带单位的物理量与换算
  2. 02天球坐标系转换和匹配
  3. 03FITS 图像与表格读写
  4. 04时间格式和时标转换
  5. 05宇宙学距离与模型计算
  6. 06表格处理及 WCS 转换

适用场景

  1. 01转换观测目标的赤道与银河坐标
  2. 02读取 FITS 图像并核查 WCS
  3. 03交叉匹配并筛选天文目录
  4. 04按指定宇宙学模型计算距离

安装

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

$npx skills add https://github.com/kalarislabs/research-agent-skills --skill astropy

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

包含的文件

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

references/
coordinates.md
cosmology.md
fits.md
tables.md
time.md
units.md
wcs_and_other_modules.md

详细介绍

Astropy

概述

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

何时使用此 Skill

在任务涉及以下内容时使用 astropy:

  • 在天球坐标系之间转换(ICRS、Galactic、FK5、AltAz 等)
  • 处理物理单位与量值(将 Jy 转换为 mJy、秒差距转换为 km 等)
  • 读取、写入或操作 FITS 文件(图像或表格)
  • 宇宙学计算(光度距离、回溯时间、哈勃参数)
  • 使用不同时间尺度(UTC、TAI、TT、TDB)和格式(JD、MJD、ISO)进行精确时间处理
  • 表格操作(读取星表、交叉匹配、筛选、连接)
  • 像素坐标与世界坐标之间的 WCS 变换
  • 天文常数与计算

快速开始

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(Flexible Image Transport System)文件。

关键操作:

  • 使用上下文管理器打开 FITS 文件
  • 按索引或名称访问 HDU(Header Data Units)
  • 读取和修改头信息(关键字、注释、历史记录)
  • 处理图像数据(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 clipping 和异常值剔除在内的稳健统计函数。

安装

# Reproducible install against the current stable release
uv pip install "astropy==7.2.0"

# Recommended optional dependencies for plotting and common workflows
uv pip install "astropy[recommended]==7.2.0"

# Full optional dependency set for broad astronomy workflows
uv pip install "astropy[all]==7.2.0"

Astropy 7.2.0 需要 Python 3.11+,并依赖 NumPy、PyERFA、PyYAML 和 packaging。请使用隔离的虚拟环境;不要使用提升后的权限安装 Astropy。

请注意,[recommended] 和 [all] 附加项会引入未固定版本的传递依赖(matplotlib、scipy 等)。为了确保生产环境可复现,请使用锁定文件固定完整的依赖树(在项目中使用 uv lock,或对 requirements 文件使用 uv pip compile),并在部署前检查解析出的版本。

常见工作流

在不同坐标系之间转换坐标
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. 缓存常用值:可缓存开销较大的计算结果(例如宇宙学距离)
  11. 明确网络访问行为:SkyCoord.from_name()、EarthLocation.of_site(refresh_cache=True)、EarthLocation.of_address()、download_file()、远程 FITS 读取以及某些 IERS 时间/坐标转换,可能会连接外部服务或更新本地缓存。避免将敏感目标名称、地址、URL 或专有文件位置发送给第三方服务。处理可能敏感的目标或数据位置时,进行这些网络调用前请先与用户确认。
  12. 固定版本以确保可复现性:在共享环境中使用固定版本,例如 astropy==7.2.0;仔细查看发行说明后再有意更新固定版本。

当前版本说明

  • 经调研的当前稳定版:Astropy 7.2.0(于 2025-11-25 发布;截至 2026-06-10 确认仍为当前版本)
  • Python 要求:3.11+
  • Astropy 8.0 处于发行候选阶段(8.0.0rc1,2026-05-26)。需关注以下重要变化:
    • 已移除已弃用的 astropy.cosmology 子模块兼容层(astropy.cosmology.flrw、.core、.funcs、.connect、.parameter)——所有内容都应直接从 astropy.cosmology 导入(例如,from astropy.cosmology import FlatLambdaCDM, z_at_value)
    • astropy.constants 的默认值从 CODATA 2018 改为 CODATA 2022;如果需要确保可复现性,可通过 astropyconst science states 固定常量版本
    • NumPy 2.0 成为最低支持版本;8.0 发布后的六个月内,7.2.x LTS 分支仍支持 NumPy 1.x
    • 内置测试运行器(astropy.test()、TestRunner)正式弃用——请直接调用 pytest
  • 近期 7.x 弃用项,新代码应避免使用:将表索引标识符作为第一个 .loc 元素传入(t.loc["b", 2])——改用 t.loc.with_index("b")[2](计划在 9.0 中移除);astropy.utils.isiterable()——改用 numpy.iterable()
  • 近期 7.0 移除项:较早弃用的 FITS API,例如 (Bin)Table.update、_ExtensionHDU、_NonstandardExtHDU,以及 CompImageHDU 的 tile_size 参数;CompImageHeader 已弃用。新示例中应避免这些旧式用法。
  • 建议使用的可选附加依赖为 recommended(用于常见绘图/科学计算依赖);只有在需要广泛的可选功能集时才使用 all。

文档和资源

参考文件

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

  • 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、建模、可视化、常量和实用工具

Agent 操作流程

  1. 检查环境。 确认库版本、单位、坐标系和数据格式(FITS、CIF、HDF5、netCDF)。
  2. 明确输入。 根据数据或用户提供的信息确认格式、标识符和参数。任何会改变结果的值都应询问,不要猜测。
  3. 先运行小规模版本。 在小型网格、区域或子集上运行,并检查其物理合理性。
  4. 执行完整任务,遵循上述说明和参考资料。
  5. 验证结果。 检查单位和量纲一致性、守恒定律或已知极限,以及数值收敛性。
  6. 报告。 说明运行了什么(版本、命令、参数)、检查了什么,以及哪些方面仍不确定。
如果出现以下情况请执行以下操作
结果违反已知物理极限报告前检查单位、边界条件和求解器容差。
这些说明中提到的函数、标志或端点在已安装版本中不存在查阅已安装版本自己的文档(help()、--help、官方文档),进行调整并告知用户。切勿编造 API。
必需的输入、标识符或参数不明确询问用户,或在运行前明确说明所作假设。

诚信规则

  • 切勿捏造结果、参数、标识符、引文或统计数据。如果无法运行或验证某项内容,请如实说明。
  • 每个定量结果都应报告不确定性和数值容差。
  • 此处与版本相关的细节可能已过时:请根据已安装版本的官方文档进行确认。
  • 对于会产生费用、占用共享 GPU 或云配额、涉及个人或患者数据,或无法撤销的操作,请先征求同意。

相关技能

  • uncertainty-and-units:使用 pint 和 uncertainties 跟踪物理单位,并传播科学计算中的测量不确定性。

评论

支持 Markdown