-1

我在从 fit 文件中读取数据时遇到问题。通常我可以很好地从 fit 文件中读取数据,但现在我有一些数据文件给我带来了一些问题。当我尝试读取应该包含三列和一个标题的文件时,我得到的只是一个看起来像这样的数字表:

[[ 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的包可用于检索这些值。我尝试查看 fit 文件包含的数据类型和格式,我的代码如下所示:

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 ,所以它的读取方式与通常不同?除了我目前所做的之外,还有其他方法可以加载三列吗?如果您需要我澄清一些观点,请询问,因为我目前已经尝试了很多事情,我不确定该采取哪个方向。任何帮助将非常感激!

4

1 回答 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']

现在上面的例子有三列,带有 headers J,H,K。您现在可以通过J,H,K分别说来称呼他们。

您在代码中所做的是您正在打印f.info它只会为您提供 FITS 文件的标题和其他内容的信息。它不会打印列和信息。

于 2014-11-02T12:42:43.980 回答