通过PyFITS裁剪FITS数据立方体图像

时间:2016-04-02 13:46:25

标签: python fits pyfits

我期待为我的问题找到解决方案,但不能。我有一个FITS数据立方体,我需要通过PyFITS裁剪它。当我通过我的脚本执行此操作时,最终我将获得2-D FITS图像!第一维是能量,第二维和第三维分别是经度和纬度。

我的脚本如下:

{{1}}

2 个答案:

答案 0 :(得分:0)

如果我理解正确你想切片3D数组但保留第三个尺寸(即使它只是1号)。

这是一个关于Numpy数组的问题。当您有一个N维numpy数组时,为一个维度传递标量索引会返回一个维度为N-1的数组,沿着您编制索引的轴进行切片。例如:

>>> arr = np.arange(27).reshape(3, 3, 3)
>>> arr
array([[[ 0,  1,  2],
        [ 3,  4,  5],
        [ 6,  7,  8]],

       [[ 9, 10, 11],
        [12, 13, 14],
        [15, 16, 17]],

       [[18, 19, 20],
        [21, 22, 23],
        [24, 25, 26]]])
>>> arr[0]
array([[0, 1, 2],
       [3, 4, 5],
       [6, 7, 8]])
>>> arr[1]
array([[ 9, 10, 11],
       [12, 13, 14],
       [15, 16, 17]])

您还可以沿着不同的轴切片,如:

>>> arr[:,0,:]
array([[ 0,  1,  2],
       [ 9, 10, 11],
       [18, 19, 20]])

如果您因任何原因想要返回N维数组而不是N-1维数组,最简单的方法是显式请求大小为1的切片,而不是使用标量索引。例如:

>>> arr[0:1]
array([[[0, 1, 2],
        [3, 4, 5],
        [6, 7, 8]]])

我会就这样的其他问题提出同样的建议:除了你的数据来自FITS文件之外,这不是关于PyFITS的问题。与大多数科学Python库一样,PyFITS将数据作为numpy数组返回。这些是大多数科学Python应用程序中用于数值数据的主要数据结构,因此学习numpy的一些基础知识是在Python中进行数据分析的先决条件,无论好坏。如果你曾经使用MATLAB,NumPy数组类似于MATLAB中的数组。你可以从我的简短教程开始,但还有其他的(也可能是更好的教程):github.com/embray/notebooks/blob/master/numpy.ipynb

答案 1 :(得分:-1)

from astropy.io import fits

Ccube = fits.open('Cha_binned_ccube.fits', mode='update')
Ccube.info()
Ccube[0].shape
Ccube[0].data = Ccube[0].data[0:3,0:181,0:402]
Ccube[0].writeto('Cha_binned_ccube_resize.fits')