繁体   English   中英

astropy.fits:要从fits表处理图像数据吗? (例如3072R x 2C)

[英]astropy.fits: Manipulating image data from a fits Table? (e.g., 3072R x 2C)

我目前在Fits文件上有一个小问题。 数据采用表格格式,这是我以前从未使用过的格式。 我是python用户,在很大程度上依赖astropy.fits来处理拟合图像。 信息的快速输出给出:

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

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

我从打开装配文件的常规程序开始:

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文档中已经看过访问表数据( 访问以表形式存储在多扩展FITS(MEF)文件中的数据

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

我不能确定没有完整的追溯,但是我认为您从这里得到的异常是:

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 ,访问HDU的.data属性等的工作方式(对图像而言是很好的)是相当低级的,并且Numpy结构化数组擅长表示表,但不能非常适合操纵它们。

通常情况下,最好使用Astropy的高级Table接口。 FITS表可以通过Table.read()直接读取到Astropy Table对象中: http : Table.read()

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

我在天体物理学实习期间使用了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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM