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']