如何将 FITS 文件转换为 numpy 数组

问题描述 投票:0回答:2

我正在尝试训练人工智能算法来确定星系的光度红移,为此我有一个包含训练数据的 FITS 文件。我需要将此 FITS 文件转换为可以在 Python 中轻松操作的格式,特别是 numpy 数组。我已经尝试过使用 astropy 并按照下面的 YouTube 视频进行操作:

https://www.youtube.com/watch?v=goH9yXu4jWw

但是,当我尝试转换文件然后检查数据类型时,它仍然是 FITS 文件而不是 numpy 数组。如果有人可以提供帮助,将不胜感激!

import astropy.io
from astropy.io import fits


truth_north = fits.open('dr9_pz_truth_north.fits')

data = truth_north[1].data  

当我打印数据类型时,它给出 astropy.io.fits.fitsrec.FITS_rec

我被告知 FITS_rec 类的行为类似于 numpy 数组,但是我必须将文件实际转换为 numpy 数组。

注意:我已经在Physics Stack Exchange 上发布了这个问题,但是我的问题没有得到真正的回答。

谢谢!

python numpy machine-learning astropy astronomy
2个回答
0
投票

您的意思是要删除所有元数据并仅保留表中的值吗?那么,这就是您要找的吗?

data = np.array(truth_north[1].data)

0
投票

FITS_rec 是一个表,但可能不会直接转换为 numpy 数组,例如如果是多列表。如果您只需要数字数据,您可以先提取天文表中的数据,然后将列转换为 numpy 数组

# Extract the data in an astropy table
from astropy.table import Table, Column
my_table = Table(truth_north[1].data)

# Extract the names of the columns
colnames = my_table.colnames

# Cast the columns into a numpy array
npdata = np.zeros([len(my_table[colnames[0]), len(colnames)])
for col in range(len(colnames)):
    npdata[:,col] = my_table[colnames[col]]
© www.soinside.com 2019 - 2024. All rights reserved.