![](/img/trans.png)
[英]Using astropy.fits and numpy to apply coincidence corrections to SWIFT fits image
[英]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.