具有多个 headers 的 astropy FITS

astropy FITS with multiple headers

我正在尝试在 Python 中创建一个 FITS 文件,但在同时编译 headers 和 PrimaryHDU 时我似乎遇到了问题。

我做了一个简单的例子,它给出了我得到的错误:

import numpy as np
from astropy.io import fits

a = np.ones([5,5])
hdu = fits.PrimaryHDU(a)
hdr = fits.Header()
hdr['NPIX1'] = 60
hdr['NPIX2'] = 60
hdr['CRPIX1'] = 0
hdr['CRPIX2'] = 0
primary_hdu = fits.PrimaryHDU(header=hdr)
hdul = fits.HDUList([primary_hdu, hdu])
hdul.writeto('table4.fits')

当运行这段代码时,我得到以下错误:

VerifyError: Verification reported errors: HDUList's element 1 is not an extension HDU. Note: astropy.io.fits uses zero-based indexing.

我看到一些帖子声称这可能与导出时 PrimaryHDU 需要成为 HDUList 中的第一个有关,但查看我的代码,我相信我已经这样做了。

如有任何帮助,将不胜感激,谢谢。

注意错误信息:

VerifyError: Verification reported errors: HDUList's element 1 is not an extension HDU. Note: astropy.io.fits uses zero-based indexing.

HDUList中的第二项是also a PrimaryHDU,这不是有效的扩展HDU(Primary这里的意思是首创且独一无二)。

让那个 HDU 成为 ImageHDU,事情就会成功:

import numpy as np
from astropy.io import fits

a = np.ones([5,5])
hdu = fits.ImageHDU(a)     # Don't use a `PrimaryHDU` here
hdr = fits.Header()
hdr['NPIX1'] = 60
hdr['NPIX2'] = 60
hdr['CRPIX1'] = 0
hdr['CRPIX2'] = 0
primary_hdu = fits.PrimaryHDU(header=hdr)
hdul = fits.HDUList([primary_hdu, hdu])
hdul.writeto('table4.fits')