Python HDU索引错误适用于numpy文件格式

Python HDU索引错误适用于numpy文件格式,python,numpy,astronomy,fits,astropy,Python,Numpy,Astronomy,Fits,Astropy,我正在尝试使用astropy模块FITS然后使用标准numpy数组处理从FITS文件读取数据。但是,由于某些原因,我收到以下错误: IndexError: too many indices 这是我正在使用的代码: from astropy.io import fits import matplotlib.pyplot as plt hdulist = fits.open('/Users/iMacHome/Downloads/spec-1959-53440-0605.fits') hdu

我正在尝试使用
astropy
模块
FITS
然后使用标准numpy数组处理从FITS文件读取数据。但是,由于某些原因,我收到以下错误:

IndexError: too many indices
这是我正在使用的代码:

from astropy.io import fits
import matplotlib.pyplot as plt

hdulist = fits.open('/Users/iMacHome/Downloads/spec-1959-53440-0605.fits')
hdu     = hdulist[1]
data    = hdu.data
flux    = data[:, 1] 
^错误回溯到
flux=data[:,1]

loglam  = data[:, 2]

这可能是天文学家可以回答的问题(或者,特别是熟悉SDS中
.fits
文件的天文学家),但我欢迎numpy和python用户的输入

我刚刚从SDSS服务台得到了以下答案:

替换:

flux   = data[:,0]
loglam = data[:,1]


这是访问Numpy记录数组中字段的正确方法。

如果这样做有效,那么接受您自己的答案可能是个好主意。显然,我只能在2天内完成此操作。看起来
数据
BinTableHDU
,而不是
ImageHDU
,这就是使用多个索引失败的原因。如果您查看对象的
repr
,它将显示有多个
dtype
dtype=[('flux','>f4'),('loglam','>f4'),('ivar','>f4'),('and_mask','>i4'),('or_mask','>i4'),('wdisp','>f4'),('sky','>f4'),('model','f4'),'f4')。
。您还可以使用
data.dtype.names
如果您不确定FITS文件发生了什么,使用
hdulist.info()
打印文件的基本统计信息可能会很有用,然后您会发现这是一个表而不是基本数组。正如上面提到的@keflavich,如果您打印数据数组本身,您还可以看到它是一个表(或多字段数组)。另请参见FWIW我还对您的答案进行了一点编辑,以澄清列名索引是访问多字段Numpy数组中字段的正确方法。
flux   = data['flux']
loglam = data['loglam']