2

我创建了多个表astropy.table.Table,例如:

 from astropy.table import Table
 import numpy as np
 #table 1
 ta=Table()
 ta["test1"]=np.arange(0,100.)
 #table 2
 tb=Table()
 tb["test2"]=np.arange(0,100.)

我可以将它们单独保存到.fits文件中

ta.write('table1.fits')
tb.write('table2.fits')

但我想让它们保存到同一个.fits文件中,每个文件都有不同的hdu. 我怎样才能做到这一点?

4

2 回答 2

5

有一个实用函数astropy.io.fits.table_to_hdu

如果您有两个表对象ta并且继续您的示例tb

from astropy.io import fits
hdu_list = fits.HDUList([
    fits.PrimaryHDU(),
    fits.table_to_hdu(ta),
    fits.table_to_hdu(tb), 
])
hdu_list.writeto('tables.fits')
于 2018-03-20T16:12:06.853 回答
1

这里有一个如何做到这一点的例子。因此,您可以执行以下操作:

import numpy as np
from astropy.io import fits

ta = Table()
ta['test1'] = np.arange(0, 100.)
col1 = fits.Column(name=ta.colnames[0], format='E', array=ta)

tb = Table()
tb['test2'] = np.arange(0, 100.)
col2 = fits.Column(name=tb.colnames[0], format='E', array=tb)

cols = fits.ColDefs([col1, col2])

hdu = fits.BinTableHDU.from_columns(cols)
hdu.writeto('table.fits')

它只有一个二进制表 HDU,但有两列。或者,要将它们添加为单独的 HDU,您可以执行类似的操作

ta = Table()
ta['test1'] = np.arange(0, 100.)
col1 = fits.Column(name=ta.colnames[0], format='E', array=ta)

hdu1 = fits.BinTableHDU.from_columns(fits.ColDefs([col1]))

tb = Table()
tb['test2'] = np.arange(0, 100.)
col2 = fits.Column(name=tb.colnames[0], format='E', array=tb)

hdu2 = fits.BinTableHDU.from_columns(fits.ColDefs([col2]))

# create a header
hdr = fits.Header()
hdr['Author'] = 'Me'
primary_hdu = fits.PrimaryHDU(header=hdr)

# put all the HDUs together
hdul = fits.HDUList([primary_hdu, hdu1, hdu2])

# write it out
hdul.writeto('table.fits')
于 2018-03-20T14:40:20.023 回答