You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用statmorph包批量计算Excel表格中多星系的相关参数

批量计算星系Sersic模型的实现方法

首先确保你已经安装了所有依赖库:numpy、pandas、astropy,以及你需要用到的statmorph包。

完整实现代码

import numpy as np
import pandas as pd
from astropy.modeling import models
# 后续计算statmorph目标参数时可取消下方注释
# import statmorph

# 加载星系参数表格
df = pd.read_excel('galaxies.xlsx')

# 按你的实际需求修改图像的宽、高数值
nx = 100
ny = 100
# 全局仅生成一次坐标网格,减少重复计算开销
y, x = np.mgrid[0:ny, 0:nx]

# 用于存储所有星系的计算结果
results = []

# 遍历所有星系参数批量计算
for _, row in df.iterrows():
    # 读取当前行的星系参数
    obj_id = row['ObjectID']
    # 注意:Sersic2D要求theta输入为弧度,表格中为角度需转换
    theta_rad = np.deg2rad(row['theta'])
    
    # 生成当前星系的Sersic2D模型
    sersic_model = models.Sersic2D(
        amplitude=row['amplitude'],
        r_eff=row['r_eff'],
        n=row['n'],
        x_0=row['x_0'],
        y_0=row['y_0'],
        ellip=row['ellip'],
        theta=theta_rad
    )
    # 生成星系图像
    galaxy_img = sersic_model(x, y)
    
    # 此处可补充你调用statmorph计算目标参数的代码
    # 示例: morph = statmorph.SourceMorphology(galaxy_img, mask=None)
    
    # 存储结果,可根据你的需求新增字段
    results.append({
        'ObjectID': obj_id,
        'galaxy_image': galaxy_img
        # 补充你计算得到的其他参数,比如:
        # 'concentration': morph.concentration
    })

# 若需要将数值结果合并回原表格,可执行以下代码
# res_df = pd.DataFrame(results).drop('galaxy_image', axis=1)
# df = pd.merge(df, res_df, on='ObjectID', how='left')

注意事项

  • 上述代码默认所有星系的图像尺寸一致,若不同星系的图像尺寸不同,可将网格生成逻辑移动到循环内部,根据每个星系的参数动态调整nx、ny即可
  • 5000个星系的计算量较小,上述写法完全可以满足需求,如果要进一步提升运行速度,可以将df.iterrows()替换为df.itertuples(),遍历效率提升约10倍
  • 如果你需要持久化存储生成的星系图像,可以使用astropy.io.fits包将数组存储为FITS文件,或使用PIL、matplotlib导出为普通图像格式

内容的提问来源于stack exchange,提问作者pythondeepspace

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.03 04:39:04