“Astropy”的版本间差异
		
		
		
		
		
		跳到导航
		跳到搜索
		
				
		
		
	
| 无编辑摘要 | |||
| (未显示同一用户的4个中间版本) | |||
| 第1行: | 第1行: | ||
| *很好的教程网站 [https://learn.astropy.org/] | *很好的教程网站 [https://learn.astropy.org/] | ||
| :比如星际红化的 [https://learn.astropy.org/tutorials/color-excess.html] | :比如星际红化的 [https://learn.astropy.org/tutorials/color-excess.html] | ||
| ⚫ | |||
| [http://docs.astropy.org/en/stable/io/fits/] | |||
| ==io== | |||
|  >>> hdulist = fits.open('input.fits') | |||
| ⚫ | |||
|  >>> hdulist.info() | |||
| * ascii文件:Table格式,支持ecsv文件直接读入table | |||
| ===header=== | |||
| *each element of an HDUList is an HDU object with .header and .data attributes, which can be used to access the header and data portions of the HDU. | |||
|  >>> hdulist[0].header['targname'] | |||
| *To see the entire header as it appears in the FITS file (with the END card and padding stripped), simply enter the header object by itself, or print(repr(header)): | |||
| *It’s also possible to view a slice of the header: | |||
|  >>> header[:2] | |||
| *Another way to either update an existing card or append a new one is to use the Header.set() method: | |||
|  >>> prihdr.set('observer', 'Edwin Hubble') | |||
| ===fits table 的读与写=== | |||
| *写  | |||
|  from astropy.table import Table | |||
|  t=Table([Bage,fzbin,Age_weight2],names=('Age','z','weights')) | |||
|  t.write('SFH_LMC3_out.fits',format='fits') | |||
| *读 | |||
|  hdu = fits.open('SFH_LMC3_out.fits') | |||
|  hdu.info() #看看哪些hdu | |||
|  data=hdu[1].data | |||
|  data.columns #看看有那些列 | |||
|  Bage=data.field('Age') | |||
| ===fits文件打开过多错误=== | |||
| * [https://docs.astropy.org/en/stable/io/fits/appendix/faq.html#i-am-opening-many-fits-files-in-a-loop-and-getting-oserror-too-many-open-files] | |||
| * fits.close()  | |||
| * 可能还根系统设置有关   | |||
|  ulimit -a | |||
|  ulimit -n 100000 | |||
|  vim /etc/security/limits.conf | |||
| * 把python的软限制编程硬限制,参见 [https://bbs.huaweicloud.com/blogs/108323],下面方法貌似也不管用 | |||
|  import resource | |||
|  soft, hard = resource.getrlimit(resource.RLIMIT_NOFILE) | |||
|  resource.setrlimit(resource.RLIMIT_NOFILE, (hard, hard)) | |||
| *lsof -p 进程id > openfiles.log命令,获得当前占用句柄的全部详情进行分析 | |||
| * 实测这两个效果不好(python 3.8) | |||
| :*del hdu.data | |||
| :*hdu = fits.open(fits_name,memmap=False) #打开fits文件数目比较多的情况下 | |||
| ==fits image读写== | |||
|  n = np.arange(100.0)  | |||
|  hdu = fits.PrimaryHDU(n) | |||
|  hdu.writeto('new2.fits') | |||
|  hdu.writeto('new2.fits') | |||
| *如果超过一个hdu | |||
|  >>> hdul = fits.HDUList([hdu]) | |||
|  >>> hdul.writeto('new1.fits') | |||
| ==astrometry== | ==astrometry== | ||
| 第60行: | 第12行: | ||
|  >>> c = SkyCoord(ra=ra1*u.degree, dec=dec1*u.degree)   |  >>> c = SkyCoord(ra=ra1*u.degree, dec=dec1*u.degree)   | ||
|  >>> catalog = SkyCoord(ra=ra2*u.degree, dec=dec2*u.degree)   |  >>> catalog = SkyCoord(ra=ra2*u.degree, dec=dec2*u.degree)   | ||
|  >>> idx, d2d, d3d = c.match_to_catalog_sky(catalog) |  >>> idx, d2d, d3d = c.match_to_catalog_sky(catalog) #d3d是假设距离为1的地方的3维距离,因此是以弧度为单位 | ||
|  >>> sel=np.where(d2d.degree < 0.00002) |  >>> sel=np.where(d2d.degree < 0.00002) | ||
|  >>> Nsel=len(sel[0]) |  >>> Nsel=len(sel[0]) | ||
|  >>> print(ra1[sel][0],ra2[idx[sel][0]) |  >>> print(ra1[sel][0],ra2[idx[sel][0]) | ||
| *算出任意两点之间距离向量的PA角,还有中点坐标[https://docs.astropy.org/en/stable/coordinates/matchsep.html] | |||
| ==宇宙学== | ==宇宙学== | ||
2024年7月12日 (五) 14:24的最新版本
- 很好的教程网站 [1]
- 比如星际红化的 [2]
io
- astropy.io.fits
- ascii文件:Table格式,支持ecsv文件直接读入table
astrometry
- match 两个星表
>>> from astropy.coordinates import SkyCoord >>> from astropy import units as u >>> c = SkyCoord(ra=ra1*u.degree, dec=dec1*u.degree) >>> catalog = SkyCoord(ra=ra2*u.degree, dec=dec2*u.degree) >>> idx, d2d, d3d = c.match_to_catalog_sky(catalog) #d3d是假设距离为1的地方的3维距离,因此是以弧度为单位 >>> sel=np.where(d2d.degree < 0.00002) >>> Nsel=len(sel[0]) >>> print(ra1[sel][0],ra2[idx[sel][0])
- 算出任意两点之间距离向量的PA角,还有中点坐标[3]
宇宙学
http://docs.astropy.org/en/stable/cosmology/
- 从红移到年龄
>>>from astropy.cosmology import FlatLambdaCDM >>>cosmo = FlatLambdaCDM(H0=70, Om0=0.3)
>>> lum_dis=cosmo.luminosity_distance(redshift) #计算光度距离
- 从年龄到红移
>>> import astropy.units as u >>> from astropy.cosmology import z_at_value >>> z_at_value(cosmos.age, 2 * u.Gyr)
单位转换
dL=lum_dis.to(u.cm)