我正在尝试训练人工智能算法来确定星系的光度红移,为此我有一个包含训练数据的 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 上发布了这个问题,但是我的问题没有得到真正的回答。
谢谢!
您的意思是要删除所有元数据并仅保留表中的值吗?那么,这就是您要找的吗?
data = np.array(truth_north[1].data)
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]]