使用Astropy将3d Numpy数组写入FITS文件

时间:2015-08-07 22:23:11

标签: python fits astropy

我有一个代表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功能?

1 个答案:

答案 0 :(得分:2)

我不使用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() - 只有从现有文件加载HDUList并且您想要关闭基础文件对象时才会执行任何操作;它对在内存中从头开始创建HDUList

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

所有这一切,根据ds9文档,您根本不需要使用它。如果您不使用-mecube选项,它只会将主要HDU中的3D数组作为数据立方体读取。