在python中折叠/展平FITS数据多维数据集

时间:2013-07-31 20:30:54

标签: python astronomy fits pyfits

我到处寻找,并没有找到解决这个问题的方法。我觉得它应该相当简单,但我们会看到。

我有.FITS格式数据立方体,我需要将其折叠成2D FITS图像。数据立方体具有两个空间维度和一个谱/速度维度。

只需寻找一个简单的python例程来加载立方体并展平所有这些层(即沿光谱/速度轴集成它们)。谢谢你的帮助。

3 个答案:

答案 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)