在Python中读取fits文件
我在读取fits文件时遇到了一些问题。通常我可以顺利读取fits文件中的数据,但现在有一些数据文件让我感到困惑。
当我尝试读取这个应该包含三列和一个标题的文件时,得到的结果却是一堆数字,看起来像这样:
[[ 64 195 45 ..., 0 0 0]]
这些都是整数,而这个数据文件实际上应该包含三列,里面是双精度和浮点数,格式应该像这样:
[9819.3801, 0.00000, 0.00000 ]
[9820.0025, 5.50764e-16, 1.62396e-16 ]
[820.6248, -3.75781e-17, 1.51864e-16]
我知道我应该能得到这些值,因为在IDL中有一个叫做 mrdfits 的工具可以用来提取这些值。我尝试查看fits文件包含的数据类型和格式,我的代码大致是这样的:
f=pyfits.open('filename')
dat =f[1].data
print f.info
>> No. Name Type Cards Dimensions Format
>> 0 PRIMARY PrimaryHDU 4 () uint8
>> 1 PRIMARY PrimaryHDU 576 (156288, 1) uint8
>> None
print pyfits.getval('filename','xtension',1)
>> BINTABLE
print dat
>> [[ 64 195 45 ..., 0 0 0]]
我的问题基本上是;有没有其他方法可以读取数据,让我得到这三列非整数的数据?我在想是不是因为这个文件是BINTABLE格式,所以读取方式和通常的不一样?有没有其他方法可以加载这三列数据,而不是我现在的做法?
如果你需要我进一步解释某些点,请问我,因为我尝试了很多方法,现在不太确定该往哪个方向走。
任何帮助都将非常感激!
1 个回答
0
一旦你下载了PyFITS,就可以开始使用了!下面有个小例子,教你怎么用PyFITS从FITS文件中获取信息,这个例子用到了三列数据。
import pyfits
# Load the FITS file into the program
hdulist = pyfits.open('Your FITS file name here')
# Load table data as tbdata
tbdata = hdulist[1].data
fields = ['J','H','K'] #This contains your column names
var = dict((f, tbdata.field(f)) for f in fields) #Creating a dictionary that contains
#variable names J,H,K
#Now to call column J,H and K just use
J = var['J']
H = var['H']
K = var['K']
这个例子里有三列,列名分别是 J,H,K
。你可以通过直接说 J,H,K
来调用它们。
在你的代码中,你实际上是在打印 f.info
,这个命令只会给你FITS文件的列名和其他一些信息,而不会打印出具体的列数据和内容。