2016-06-28 40 views
0

我目前遇到一个适合文件的小问题。数据是表格格式,这是我以前没有使用的格式。我是一个python用户,并且非常依赖astropy.fits来操纵合适的图像。对信息的快速输出提供:astropy.fits:从拟合表操纵图像数据? (例如,3072R x 2C)

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内的配合图像COUNT- RATE',然后以一种格式将其添加到具有相同尺寸的其他计数率数组中。

我开始与我平时prodcedure打开一个文件千篇一律:

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回来。我已经看了一下在这里访问太阳的文档中的表格数据(Accessing data stored as a table in a multi-extension FITS (MEF) file

如果任何人有一个经过验证的方法来访问适合表中的这样的图像,我会非常感激!非常感谢。

+1

“PIXTYPE”和“ORDERING”关键字表明这是[HEALPix](http://healpix.jpl.nasa.gov/)地图。您可能需要安装并尝试使用[healpy](https://healpy.readthedocs.io/en/latest/)。 (尝试使用'healpy.read_map()',例如,请参阅healpy教程)。 – Evert

+0

@Evert非常感谢Evert,我现在就试试这个。 – user3125347

+0

@Evert那么我该如何去创建一个X的Y适合从阅读healpix映射图像?我现在已经设法创建一个新的适合文件与3072R×1C作为尺寸...? – user3125347

回答

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 

我不不知道你想要什么数据,但我可以帮你;)

+0

我有五个适合的文件,我想增加每个图像的计数到另一个。所以我有一个复合图像。 – user3125347

+0

@ user3125347你想从每个文件计数一些?你可以从你的适合文件中举一个例子吗?我只想看到你的数据文件;) – Deadpool

+0

如果你看到上面的评论,你应该看到一个链接到一个网站,它具有与我相同的适合文件...你可以下载他们看到他们的结构...? – user3125347

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,访问HDU的.data属性等的方式是相当低的水平, Numpy结构化数组擅长表示表,但对于操作它们并不好。

您最好使用Astropy的更高层次的Table接口。一个FITS表可直接与Table.read()读入一个Astropy Table对象:http://docs.astropy.org/en/stable/io/unified.html#fits

同样的事情不会对FITS图像存在的唯一原因是没有一个通用的“图像”类呢。