我到处寻找,并没有找到解决这个问题的方法。我觉得它应该相当简单,但我们会看到。
我有.FITS格式数据立方体,我需要将其折叠成2D FITS图像。数据立方体具有两个空间维度和一个谱/速度维度。
只需寻找一个简单的python例程来加载立方体并展平所有这些层(即沿光谱/速度轴集成它们)。谢谢你的帮助。
答案 0 :(得分:4)
This tutorial on pyfits有点旧,但基本上还是正确的。关键是用pyfits(或astropy.io.fits)打开FITS多维数据集的输出是你有一个3维numpy数组。
import pyfits
# if you are using astropy then for this example
# from astropy.io import fits as pyfits
data_cube, header_data_cube = pyfits.getdata("data_cube.fits", 0, header=True)
data_cube.shape
# (Z, X, Y)
然后你必须决定如何沿着Z轴展平/整合立方体,并且有足够的资源来帮助你决定正确的(希望基于某些分析框架)来做到这一点。
答案 1 :(得分:2)
好的,这似乎有效:
import pyfits
import numpy as np
hdulist = pyfits.open(filename)
header = hdulist[0].header
data = hdulist[0].data
data = np.nan_to_num(data)
new_data = data[0]
for i in range(1,84): #this depends on number of layers or pages
new_data += data[i]
hdu = pyfits.PrimaryHDU(new_data)
hdu.writeto(new_filename)
此例程的一个问题是在此转换期间WCS坐标(附加到原始数据立方体)会丢失。
答案 2 :(得分:1)
这是一个古老的问题,但spectral-cube现在为此提供了更好的解决方案。
示例,基于Teachey的回答:
from spectral_cube import SpectralCube
cube = SpectralCube.read(filename)
summed_image = cube.sum(axis=0)
summed_image.hdu.writeto(new_filename)