我已經看遍了所有地方,並沒有找到解決此問題的方法。我覺得它應該相當簡單,但我們會看到。在python中摺疊/壓扁FITS數據立方
我有一個.FITS格式的數據立方體,我需要將它摺疊成2D FITS圖像。數據立方體有兩個空間維度和一個光譜/速度維度。
只需尋找一個簡單的python例程來加載立方體並將所有這些圖層展平(即沿光譜/速度軸進行整合)。謝謝你的幫助。
我已經看遍了所有地方,並沒有找到解決此問題的方法。我覺得它應該相當簡單,但我們會看到。在python中摺疊/壓扁FITS數據立方
我有一個.FITS格式的數據立方體,我需要將它摺疊成2D FITS圖像。數據立方體有兩個空間維度和一個光譜/速度維度。
只需尋找一個簡單的python例程來加載立方體並將所有這些圖層展平(即沿光譜/速度軸進行整合)。謝謝你的幫助。
OK,這似乎工作:
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座標(這是附加到原始數據立方體)這種轉換過程中丟失。
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軸集成立方體,並有大量的資源在那裏,幫助你決定做正確的(希望基於一些分析框架)。
這是一個老問題,但spectral-cube現在提供了一個更好的解決方案。
例如,基於Teachey的回答是:
from spectral_cube import SpectralCube
cube = SpectralCube.read(filename)
summed_image = cube.sum(axis=0)
summed_image.hdu.writeto(new_filename)
究竟是如何被格式化的適合數據?我建議使用python模塊'pyfits'和'matplotlib.pyplot'。 –