多个表保存在同一个 .fits 文件中
Multiple Tables saved in the same .fits file
我用 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
。我该怎么做?
有一个如何执行此操作的示例 here。因此,您可以执行以下操作:
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')
只有一个二进制 table 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')
有一个效用函数astropy.io.fits.table_to_hdu。
如果您有两个 table 对象 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')
我用 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
。我该怎么做?
有一个如何执行此操作的示例 here。因此,您可以执行以下操作:
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')
只有一个二进制 table 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')
有一个效用函数astropy.io.fits.table_to_hdu。
如果您有两个 table 对象 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')