2

我有一个代表 256x256 图像的 3D NumPy 数组(即 (10, 256, 256))。我想使用 astropy.io.fits 将此数组写入 FITS 文件,以便我可以使用 ds9 -mecube 打开文件并在帧中移动。我的尝试如下所示

export_array = numpy.array(images) #Create an array from a list of images
print export_array.shape ## (10, 256, 256)

hdu = fits.PrimaryHDU(export_array)
hdulist = fits.HDUList([hdu])
hdulist.writeto(out_file_name)
hdulist.close()

这会给我一个 FITS 文件,它实际上包含 3D 数组。但是,如果我用 ds9 -mecube 打开,我只能看到第一张图片。无论如何使用 astropy.io.fits 创建具有此功能的 FITS 文件?还是我缺少 ds9 的某些功能?

4

1 回答 1

3

我不使用 ds9,但显然该-mecube选项意味着“多扩展立方体”。文档说“将多扩展 FITS 文件加载为数据立方体。您只是将单个数组编写为数据立方体。要将其编写为多扩展 FITS,您可能会执行以下操作:

hdul = fits.HDUList()
hdul.append(fits.PrimaryHDU())

for img in export_array:
    hdul.append(fits.ImageHDU(data=img))

hdul.writeto('output.fits')

(您不需要调用hdul.close()--that 仅当HDUList从现有文件加载并且您想要关闭底层文件对象时才执行任何操作;它对HDUList在内存中从头开始创建的对象没有影响)。

我不确切知道 ds9 期望将多扩展 FITS 文件作为数据立方体加载——这不是任何特定的 FITS 约定,文档也不清楚。但它可能是这样的。

综上所述,根据 ds9 文档,您根本不需要使用它。如果您不使用该-mecube选项,它只会将主 HDU 中的 3D 阵列作为数据立方体读取。

于 2015-08-10T15:34:40.400 回答