Python astropy.fits:处理fits表中的图像数据?(例如3072R x 2C)
我目前对fits文件有点小问题。数据是表格格式,我以前没有使用过这种格式。我是python用户,非常依赖astropy.fits来处理fits图像。信息的快速输出提供:Python astropy.fits:处理fits表中的图像数据?(例如3072R x 2C),python,arrays,numpy,astropy,fits,Python,Arrays,Numpy,Astropy,Fits,我目前对fits文件有点小问题。数据是表格格式,我以前没有使用过这种格式。我是python用户,非常依赖astropy.fits来处理fits图像。信息的快速输出提供: No. Name Type Cards Dimensions Format 0 PRIMARY PrimaryHDU 60 () 1 BinTableHDU 29 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
我想访问fits图像,它存储在标记为“COUNT-RATE”的TTYPE中,然后以某种格式将其添加到具有相同维度的其他COUNT-RATE数组中
我从打开fits文件的常规产品开始:
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
但这是由于索引器返回的错误:数组的索引太多。我在这里查看了astropy文档中的表数据访问()
如果有人有一个尝试和测试的方法来访问这样的图像从一个fits表我会非常感激!非常感谢。我在天体物理学实习期间使用了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
我不知道您到底想要什么样的数据,但我可以帮您;) 如果没有看到完整的回溯,我无法确定,但我认为您得到的例外是:
image_XRAY_SKYVIEW_R1 = numpy.array(image_XRAY_SKYVIEW_R1)
没有理由在数组周围手动换行numpy.array()
。它已经是一个Numpy数组了。但在本例中,它是一个结构化数组(请参阅)
@仙女座93号的答案是正确的。但有关这方面的一般文档,请参见:
但是,手动调用fits.open
、访问HDU的.data
属性等的工作方式(这对于图像来说很好)相当低级,Numpy结构化数组擅长表示表,但不擅长操作表
您最好使用Astropy的高级界面。FITS表格可以通过表格直接读取到Astropy表格
对象中。read()
:
FITS images不存在相同内容的唯一原因是还没有通用的“Image”类。PIXTYPE
和ORDERING
关键字表明这是一张地图。您可能希望安装并尝试改用。(例如,尝试使用healpy.read_map()
。请参阅healpy教程。)@Evert非常感谢Evert,我现在就来试试。@Evert那么,我如何通过阅读healpy地图来创建X X X Y fits图像呢?我现在已经成功地创建了一个新的fits文件,其中3072R x 1C作为尺寸…?@Evert最终我希望能够读取多个HEALPix映射,然后将它们共同添加以查看复合“映射”。我认为您可以将所有HEALPix映射“重新分级”到相同的nside参数(和相同的嵌套),然后您可以简单地添加像素值,并将它们作为healpix贴图再次写入。您想创建(完整天空)的原因是什么x-y图而不是healpy图?我有五个fits文件,我想将每个图像中的计数添加到另一个图像中。因此我有一个合成图像。@user3125347您想从每个文件中计算一些计数吗?您能从fits文件中举出一个例子吗?我只想看看您的数据文件;)如果您看到上面的评论,您应该看到一个指向网站wh的链接ich有和我一样的fits文件…你能下载它们看看它们的结构吗…?@user312547我看到了PCOUNT=0/随机参数计数和GCOUNT=1/组计数
。你想计算哪一个?我在网站上找不到下载fits文件的链接这里有一些fits文件,但它们是所有的标准化和结构都以相同的方式。让我们先运行PCOUNT。一旦我知道我的脚本正在添加“某物”,我可以随时更改此细节: