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

如何对矩阵多列数据批量执行Gaussian拟合并保存结果

批量高斯拟合解决方案

我来帮你搞定这个批量处理每列高斯拟合的问题!你的现有代码只处理了第一列,核心问题是没有正确遍历所有列,而且还有几个细节需要调整,下面是完整的解决方案:

首先修正基础问题

你的导入语句有语法错误,而且x轴的长度和每列数据的长度不匹配(你说每列有100个数值,但原代码里x只有50个点),这些都会导致后续循环出问题。

完整代码实现

from astropy.io import fits
from astropy.modeling import models, fitting
import numpy as np

# 1. 读取FITS数据(用with语句自动管理文件,避免句柄泄漏)
with fits.open('Image.fits') as Image1:
    Image_data = Image1.data[:,:]

# 2. 确保x轴长度和每列数据一致(每列100个数值,对应生成100个点)
x = np.linspace(-50, 50, 100)

# 3. 初始化拟合器和结果存储数组
num_columns = Image_data.shape[1]  # 获取总列数(这里是1024)
fit_results = np.zeros((num_columns, 3))  # 每行存储[振幅, 均值, 标准差]三个参数
fitter = fitting.LevMarLSQFitter()

# 4. 遍历每列执行拟合
for col_idx in range(num_columns):
    # 关键:每次循环重新初始化高斯模型,避免上一次拟合的参数残留影响结果
    gauss_model = models.Gaussian1D(amplitude=1000., mean=0, stddev=1.)
    # 获取当前列的数值
    y_data = Image_data[:, col_idx]
    # 执行拟合
    fitted_model = fitter(gauss_model, x, y_data)
    # 保存拟合后的参数到结果数组
    fit_results[col_idx, 0] = fitted_model.amplitude.value
    fit_results[col_idx, 1] = fitted_model.mean.value
    fit_results[col_idx, 2] = fitted_model.stddev.value

# 可选:将结果保存到本地文件(比如numpy的npy格式,方便后续读取)
np.save('gauss_fit_results.npy', fit_results)

关键细节说明

  • 每次重新初始化模型:LevMarLSQFitter会原地修改传入的模型对象,如果重复使用同一个模型,下一次拟合会以上一次的结果作为初始值,容易导致拟合偏差或收敛失败。
  • 维度匹配:必须保证x的长度和每列数据的长度完全一致,否则拟合时会抛出维度不匹配的错误。
  • 异常处理(可选):如果部分列的数据不符合高斯分布导致拟合失败,可以加入try-except块捕获异常,用NaN标记失败的列:
for col_idx in range(num_columns):
    try:
        gauss_model = models.Gaussian1D(amplitude=1000., mean=0, stddev=1.)
        y_data = Image_data[:, col_idx]
        fitted_model = fitter(gauss_model, x, y_data)
        fit_results[col_idx] = [fitted_model.amplitude.value, fitted_model.mean.value, fitted_model.stddev.value]
    except Exception as e:
        print(f"列 {col_idx} 拟合失败: {str(e)}")
        fit_results[col_idx] = [np.nan, np.nan, np.nan]

内容的提问来源于stack exchange,提问作者Marcus K.

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.27 09:38:10