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

Python创建含多表头FITS文件时PrimaryHDU与表头编译异常求助

解决Python创建FITS文件时的PrimaryHDU冲突问题

我来帮你搞定这个问题!你遇到错误的核心原因是:一个FITS文件的HDU列表(HDUList)里只能存在一个PrimaryHDU,但你的代码里同时创建了两个PrimaryHDU实例(hdu和primary_hdu),这违反了FITS文件的规范。

下面给你两种可行的解决思路:

思路1:将数据与自定义表头合并到同一个PrimaryHDU

这是最常用的方式,直接把数据和你定义的表头绑定到同一个PrimaryHDU中,不需要分开创建两个Primary实例:

import numpy as np
from astropy.io import fits

# 创建数据数组
a = np.ones([5,5])
# 定义自定义表头
hdr = fits.Header()
hdr['NPIX1'] = 60
hdr['NPIX2'] = 60
hdr['CRPIX1'] = 0
hdr['CRPIX2'] = 0
# 把数据和表头合并为一个PrimaryHDU
primary_hdu = fits.PrimaryHDU(data=a, header=hdr)
# 创建HDU列表并写入文件(加上overwrite=True可以覆盖已存在的文件)
hdul = fits.HDUList([primary_hdu])
hdul.writeto('table4.fits', overwrite=True)

思路2:用ImageHDU存储额外数据(保留独立的PrimaryHDU)

如果你确实需要保留一个不带数据的PrimaryHDU,同时附加数据块,那么第二个HDU必须使用非Primary类型(比如ImageHDU),示例代码如下:

import numpy as np
from astropy.io import fits

a = np.ones([5,5])
hdr = fits.Header()
hdr['NPIX1'] = 60
hdr['NPIX2'] = 60
hdr['CRPIX1'] = 0
hdr['CRPIX2'] = 0

# 创建带自定义表头的PrimaryHDU(无数据)
primary_hdu = fits.PrimaryHDU(header=hdr)
# 用ImageHDU存储你的数据
image_hdu = fits.ImageHDU(data=a)
# 组合HDU列表,注意PrimaryHDU必须放在第一个位置
hdul = fits.HDUList([primary_hdu, image_hdu])
hdul.writeto('table4.fits', overwrite=True)

两种方案都能解决你的错误,你可以根据实际需求选择:如果只是想给数据加自定义元数据,选思路1;如果需要多数据块的结构,选思路2。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.25 08:22:57