我有一个60的FITS文件,其中包含一个二进制表。我想一次读(并处理)这个表一行/条目/行/块*。
(*我不确定正确的名称)
我使用的是化装,我想做的事情简单地归结为:
import pyfits
hdulist = = pyfits.open("file.fits")
# the binary table has to be in the 2nd extension
# hence it is in hdulist[1]
n_entries = hdulist[1].header['NAXIS2']
for i in xrange(n_entries):
entry = hdulist[1].data[i] # I am confused what happens at this step
# now do stuff with the values in entry
# .....变量entry的类型为<class 'pyfits.fitsrec.FITS_record'>,其长度等于二进制表中的列数。然而,所发生的事情似乎是二进制表的整体被读取到内存中,这一行是:entry = hdulist[1].data[i]。
我已经查看了pyfits文档,但我找不到任何方法,这些方法似乎是根据表条目(或一次读取一小组条目)从表条目上从二进制表扩展读取数据的。我不想从表中选择某些条目,只需按顺序扫描它们。
我想我的问题是:
0)在hdulist[1].data[i]步骤中发生了什么?为什么所有的东西都会被读到记忆里?(有办法绕过这件事吗?)
( 1)我是不是错过了什么,化装们真的能做我想做的事吗?
( 2)外面还有另一个蟒蛇库吗?(即在FITS扩展中使用二进制表)
3)如果没有,我是否可以用不同的二进制(或其他压缩/非ascii)格式重写数据(这不合适),并找到其他python库或模块来做我想做的事情?
发布于 2014-04-09 14:36:57
pyfits目前缺乏用于表的行迭代器。如果数据列不需要从磁盘上的存储格式转换为“物理”值,那么读取表是快速的。但是,否则,如果您尝试读取此类列,则当前会发生故障。在重写表接口时,我不会对此做太多的斗争,但同时,您可能希望尝试fitsio库,它是一个围绕CFITSIO的Python包装器,并提供了高效的基于行的表迭代。
https://stackoverflow.com/questions/22950177
复制相似问题