使用 Astropy 将 3d Numpy 数组写入 FITS 文件
Write 3d Numpy array to FITS file with 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
选项意味着 "multi-extension cube"。文档说“将多扩展 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 数组作为数据立方体。
我有一个表示 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
选项意味着 "multi-extension cube"。文档说“将多扩展 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 数组作为数据立方体。