导入pyfits模块:import pyfits 


(1)打开fits文件: 

hdulist = pyfits.open( '/home/huang/test.fits' )


(2)查看fits里面存了什么: 

一个fits文件至少包含一个主头文件,可以有也可以没有扩展头。主头存任意维数组(不能存字符),扩展头存表格(table,表格形式任意,可存字符、数字等,例如存星表)。

hdulist.info()

No.  Name              Type        Cards   Dimensions   Format

0     PRIMARY   PrimaryHDU      7             ()             int32

1                      BinTableHDU    26      3072R x 1C   [1024E]

 

(3)查看数据描述,即header:

不同的头有不同的header,

看[0]PrimaryHDU的header:

hdulist[0].header.items()

看[1]BinTableHDU的header(用healpix Haslam图作例子):

hdulist[1].header.items()

得到结果如:

[('XTENSION', 'BINTABLE'),

 ('BITPIX', 8),

 ('NAXIS', 2),

 ('NAXIS1', 8),

 ('NAXIS2', 3145728),

 ('PCOUNT', 0),

 ('GCOUNT', 1),

 ('TFIELDS', 2),

 ('TTYPE1', 'TEMPERATURE'),

 ('TFORM1', 'E'),

 ('TUNIT1', 'K'),

 ('TTYPE2', 'N_OBS'),

 ('TFORM2', 'E'),

 ('TUNIT2', 'counts'),

 ('EXTNAME', 'ARCHIVE MAP TABLE'),

 ('DATE', '2003-02-05T00:00:00'),

 ('PIXTYPE', 'HEALPIX'),

 ('ORDERING', 'NESTED'),

 ('NSIDE', 512),

 ('FIRSTPIX', 0),

 ('LASTPIX', 3145727)]

可看到,hdulist[1]储存的是temperature,单位是K,healpix类型为nested,nside=512共3145728像素。

 


(4)取fits数据:

fits数据有两种,一是数组(数字)数据,二是table数据。两者都用同一个函数 .data (注意不是.data(),没有())

取数组数据:data1 = hdulist[0].data

取table数据:data2 = hdulist[1].data

 

(5)修改header

 

先取出header:

hdr = hdulist[1].header

(这里的hdr与hdulist共用地址,因此hdr变了hdulist也跟着变。而hdulist[1].header.items()只用来显示)

 

1、修改header的值(下面添加header的.set()也能修改值):

header取值可用keyword和序号取,如(3)所示的header,要取得('PIXTYPE', 'HEALPIX')有两种方法:

keyword:hdr['PIXTYPE'](注意,在header中,字母不分大小写)

序号:hdr[-5]或hdr[16]

现在hdr['PIXTYPE']的值为’HEALPIX',改为’test':

hdr['PIXTYPE'] = 'test'

 

2、添加header:

hdr.append和hdr.insert都可以添加header,但它们功能很少且可以添加重复的keyword造成混乱。

添加和修改header最好用 .set()

1.修改header的值,如果keyword不存在则在末尾创建:

例如修改('PIXTYPE', 'HEALPIX')的值:

hdr.set('PIXTYPE', 'test')

如果keyword不小心错写成’PAXTYPE’,则会在原header末尾创建('PAXTYPE', 'test')

2.在某个keyword前后添加:

hdr.set('en', 'haha', before='PIXTYPE')

在’PIXTYPE’前面添加('en','haha')

在后面添加则为

hdr.set('en', 'haha', after='PIXTYPE')

另外,before和after=可以为序号如before=10

3.header除了keyword和值之后,还可有“解释”,其实set的完整命令为:

一、set( 原keyword, 新值, 解释 )

hdr.set('PIXTYPE', 'test', 'explain this header')

二、set( 新keyword, 新值, 解释, after=原keyword )

hdr.set( 'add', 'new', 'this is a new header', after='PIXTYPE' )

解释可有可无。

注意,set不可以新建重复已存在的keyword。

 

3、删除header:

del hdr['PIXTYPE'] 或 del hdr[16]

删除一段:del hdr[5:10]

把del放前面。


 

(6)保存修改:

hdulist.writeto( 'new_name.fits' )

注意,保存的文件名要是新名字,如果当前文件夹下已经有相同文件名存在,则出错而不能保存。


(7)保存任意维数组数据(不含字符):

1、A是要储存的N维数组

2、Create a PrimaryHDU object to encapsulate the data:

hdu = pyfits.PrimaryHDU(A)

3(1)、Then create a HDUList to contain the newly created primary HDU:

hdulist = pyfits.HDUList([hdu])

hdulist.writeto(’A.fits’)

3(2)、pyfits提供一个合并步骤处理上面的3(1)的两步(3(2)和3(1)是完全等价的)

hdu.writeto(’A.fits’)

 

 

 

(8)将table保存为FITS文件:

用以下的例子来说明:

table以“列”为单位,下面的table有3列,第一列是字符(名称),第二列是数字(值)

a1 = np.array(['NGC1001', 'NGC1002', 'NGC1003'])

a2 = np.array([11.1, 12.3, 15.2])

a3 = np.array([250, 213, 36])

 

col1 = pyfits.Column(name='source', format='20A', array=a1)

col2 = pyfits.Column(name='V_magitude', format='E', array=a2)

col3 = pyfits.Column(name='random_number', format='I', array=a3)

 

cols = pyfits.ColDefs([col1,col2,col3])

# 就算只有一列,也可写 []:cols = pyfits.ColDefs([col1])

 

# 选择2是新方法;选择1是旧方法,在新版本中可能会去掉

选择1:tbhdu = pyfits.TableHDU.from_columns(cols)

选择2:tbhdu = pyfits.new_table(cols)

 

tbhdu.writeto('outname.fits')

 

Column函数:

pyfits.Column(name, format, unit, null, bscale, bzero, disp, start, dim, array, ascii)

全部参数的默认值都是None。

参数名对应header的keyword为:

name -> column name, TTYPE

format -> value format, TFORM

unit -> TUNIT

null -> null value, TNULL

scale -> bscale value, TSCAL

bzero -> bzero value, TZERO

dis -> display format, TDISP

start -> column starting position (ASCII table only), TBCOL

dim -> dimension, TDIM

 

 

 

(9)有效储存format

fit函数 pytorch python中fit用法_数据