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

标签 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 是否有一些我缺少的功能?

最佳答案

我不使用 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 数组读取为数据立方体。

关于python - 使用 Astropy 将 3d Numpy 数组写入 FITS 文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31887478/

相关文章:

python - astropy.io.fits 从具有多个 HDU 的大型拟合文件中读取行

python - 始终在 wcs 轴上显示整个刻度标签

python - 如何在astropy,python中通过 "pillars of creation"创建 "make_lupton_rgb of astropy"的良好图像?

python - 在python中获取错误的本地IP地址

python - 寻找直线和轮廓之间的交点

python - xlsxwriter worksheet.write_blank 适用于范围

matlab - 如何使用 Matlab 从星系 FITS 图像中移除星星和其他物体?

c++ - 使用 CFITSIO 库从 FITS 表中读取可变长度数组

python - 一种通过比较特定值从多维数组中删除重复项的方法

python - 标量与 Numpy 数组的比较