在Python中读取fits文件

-1 投票
1 回答
6679 浏览
提问于 2025-05-01 03:37

我在读取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文件的列名和其他一些信息,而不会打印出具体的列数据和内容。

撰写回答