Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ionic-framework/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 3.x Astropy Fits:如何写出一张表,并将行切掉?_Python 3.x_Astropy_Fits - Fatal编程技术网

Python 3.x Astropy Fits:如何写出一张表,并将行切掉?

Python 3.x Astropy Fits:如何写出一张表,并将行切掉?,python-3.x,astropy,fits,Python 3.x,Astropy,Fits,我目前正在使用一些fits表,在Astropy.io.fits中输出时遇到问题。从本质上讲,我是在切掉一堆包含我不感兴趣的对象数据的行,但是当我保存新表时,所有这些行都神奇地重新出现了 例如: import astropy.io.fits as fits import numpy as np hdu = fits.open('some_fits_file.fits')[1].data sample_slice = [True True True False False True] hdu_

我目前正在使用一些fits表,在Astropy.io.fits中输出时遇到问题。从本质上讲,我是在切掉一堆包含我不感兴趣的对象数据的行,但是当我保存新表时,所有这些行都神奇地重新出现了

例如:

import astropy.io.fits as fits
import numpy as np

hdu = fits.open('some_fits_file.fits')[1].data

sample_slice = [True True True False False True]

hdu_sliced = hdu[sample_slice]
现在,我天真的头脑期望“hdu”有6行,hdu_sliced有4行,这是使用np.size()时得到的结果。因此,如果保存hdu_切片,新的fits文件也将有4行:

new_hdu = fits.BinTableHDU.from_columns(fits.ColDefs(hdu_sliced.columns))

new_hdu.writeto('new_fits_file.fits')

np.size(hdu3)
6
因此,由于某种原因,我用切片去掉的这两行实际上没有从表中删除,并且输出的文件与原始文件相同

如何从表中删除不需要的行,然后将新数据输出到新文件

干杯, 艾希礼

你能用它代替吗

这是一个更友好的桌面对象

进行行选择的一种方法是使用所需行的列表(或数组)索引到表对象中:

>>> from astropy.table import Table
>>> table = Table()
>>> table['col_a'] = [1, 2, 3]
>>> table['col_b'] = ['spam', 'ham', 'jam']
>>> print(table)
col_a col_b
----- -----
    1  spam
    2   ham
    3   jam
>>> table[[0, 2]] # Table with rows 0 and 2 only, row 1 removed (a copy)
<Table length=2>
col_a col_b
int64  str4
----- -----
    1  spam
    3   jam

存在潜在问题,例如,在使用
表格
时,表格标题未被保留,只有键、值信息存储在
表格.meta
中。您可以查阅Astropy docs on table and FITS BINTABLE,了解有关这两个表对象的详细信息,它们如何表示数据或如何在这两个表对象之间进行转换,或者在此处或Astropy dev邮件列表中询问后续问题。

如果您想坚持使用
FITS_rec
,您可以尝试以下方法:,这似乎是一个解决办法:

new_hdu = fits.BinTableHDU.from_columns(hdu_sliced._get_raw_data())

类型(hdu)=fits.fitsrec.fits\u rec
?是的,就是那种类型。看起来已经完成了!谢谢你,我不想重新设计我所有的代码来使用astropy.table。不要使用以下划线开头的方法,因为它们很容易改变。它们仅供内部使用。有更好的办法。
new_hdu = fits.BinTableHDU.from_columns(hdu_sliced._get_raw_data())