1

我目前对 fit 文件有一点问题。数据是表格格式,这是我以前没有使用过的格式。我是一个 python 用户,并且严重依赖 astropy.fits 来操作 fit 图像。信息的快速输出给出:

No.    Name         Type      Cards   Dimensions   Format
0    PRIMARY     PrimaryHDU      60   ()              
1                BinTableHDU     29   3072R x 2C   [1024E, 1024E]

BinTableHDU 的标头如下:

XTENSION= 'BINTABLE'           /Written by IDL:  Mon Jun 22 23:28:21 2015       
BITPIX  =                    8 /                                                
NAXIS   =                    2 /Binary table                                    
NAXIS1  =                 8192 /Number of bytes per row                         
NAXIS2  =                 3072 /Number of rows                                  
PCOUNT  =                    0 /Random parameter count                          
GCOUNT  =                    1 /Group count                                     
TFIELDS =                    2 /Number of columns                               
TFORM1  = '1024E   '           /Real*4 (floating point)                         
TFORM2  = '1024E   '           /Real*4 (floating point)                         
TTYPE1  = 'COUNT_RATE'         /                                                
TUNIT1  = '1e-6cts/s/arcmin^2' /                                                
TTYPE2  = 'UNCERTAINTY'        /                                                
TUNIT2  = '1e-6cts/s/arcmin^2' /
HISTORY g000m90r1b120pm.fits created on 10/08/97. PI channel range:  8: 19      
PIXTYPE = 'HEALPIX '           / HEALPIX pixelisation                           
ORDERING= 'NESTED  '           / Pixel ordering scheme, either RING or NESTED   
NSIDE   =                  512 / Healpix resolution parameter                   
NPIX    =              3145728 / Total number of pixels                         
OBJECT  = 'FULLSKY '           / Sky coverage, either FULLSKY or PARTIAL        
FIRSTPIX=                    0 / First pixel # (0 based)                        
LASTPIX =              3145727 / Last pixel # (zero based)                      
INDXSCHM= 'IMPLICIT'           / indexing : IMPLICIT or EXPLICIT                
GRAIN   =                    0 / GRAIN = 0: No index,                           
COMMENT         GRAIN =1: 1 pixel index for each pixel,                         
COMMENT         GRAIN >1: 1 pixel index for Grain consecutive pixels            
BAD_DATA=         -1.63750E+30 / Sentinel value given to bad pixels             
COORDSYS= 'G       '           / Pixelization coordinate system                 
COMMENT         G = Galactic, E = ecliptic, C = celestial = equatorial          
END

我想访问存储在标记为“计数率”的 TTYPE 中的拟合图像,然后将其设置为一种格式,然后我可以将其添加到具有相同尺寸的其他计数率数组中。

我从打开 fit 文件的常用程序开始:

hdulist_RASS_SXRB_R1 = fits.open('/Users/.../RASS_SXRB_R1.fits')
hdulist_RASS_SXRB_R1.info()
image_XRAY_SKYVIEW_R1 = hdulist_RASS_SXRB_R1[1].data
image_XRAY_SKYVIEW_R1 = numpy.array(image_XRAY_SKYVIEW_R1)
image_XRAY_SKYVIEW_header_R1 = hdulist_RASS_SXRB_R1[1].header

但这又回来了IndexError: too many indices for array。我在此处的 astropy 文档中查看了访问表数据(Accessing data stored as a table in a multi-extension FITS (MEF) file

如果有人有一种经过验证的方法可以从适合表中访问此类图像,我将不胜感激!非常感谢。

4

2 回答 2

1

如果没有看到完整的回溯,我无法确定,但我认为你得到的例外是:

image_XRAY_SKYVIEW_R1 = numpy.array(image_XRAY_SKYVIEW_R1)

没有理由手动环绕numpy.array()数组。它已经是一个 Numpy 数组。但在这种情况下,它是一个结构化数组(参见http://docs.scipy.org/doc/numpy/user/basics.rec.html)。

@Andromedae93 的答案是正确的。但对于这方面的一般文档,请参阅:http ://docs.astropy.org/en/stable/io/fits/index.html#working-with-table-data

但是,您手动调用fits.open、访问.dataHDU 的属性等的工作方式(这对图像很好)是相当低级的,并且 Numpy 结构化数组擅长表示表格,但不适合操纵它们。

通常最好使用 Astropy 的高级Table界面。FITS 表可以通过以下方式直接读入 AstropyTable对象Table.read()http ://docs.astropy.org/en/stable/io/unified.html#fits

FITS 图像不存在相同事物的唯一原因是还没有通用的“图像”类。

于 2016-06-28T14:20:31.517 回答
0

我在天体物理学实习期间使用了 astropy.io.fits,这是我打开文件 .fits 并进行一些操作的过程:

# Opening the .fits file which is named SMASH.fits
field = fits.open(SMASH.fits)         

# Data fits reading  
tbdata = field[1].data 

现在,使用这种方法,tbdata 是一个 numpy.array,你可以做很多事情。

例如,如果您有如下数据:

ID, Name, Object
1, HD 1527, Star
2, HD 7836, Star
3, NGC 6739, Galaxy

如果您想在一个条件下打印数据:

Data_name = tbdata['Name']

你会得到 :

HD 1527
HD 7836
NGC 6739

我不知道您对您的数据到底想要什么,但我可以帮助您;)

于 2016-06-28T13:57:32.493 回答