宇宙学I/O详细信息#
泡菜中的宇宙学#
为 temporary 存储是序列化和反序列化Cosmology对象的一种简单方法,它使用 pickle
模块。例如,这对于传递 Cosmology
在线程之间。
>>> import pickle
>>> from astropy.cosmology import Planck18
>>> with open("planck18.pkl", mode="wb") as file:
... pickle.dump(Planck18, file)
>>> # and to read back
>>> with open("planck18.pkl", mode="rb") as file:
... cosmo = pickle.load(file)
>>> cosmo
FlatLambdaCDM(name="Planck18", ...
然而,这种方法具有以下所有随之而来的缺点 pickle
-安全漏洞和非人类可读的文件。Pickle文件通常不适合进行良好的持久存储。
解决这两个问题, astropy
为读写不同格式的数据提供统一的接口。
重命名字段#
中的许多I/O方法 cosmology
支持重命名 Cosmology
在转换为其他格式时初始化。这是通过将一个 rename
将词典添加到 to_format
方法。同样,在从不同格式转换时, rename
可以将字典传递给 from_format
方法,将输入的字段映射到 Cosmology
班级。
例如,要重命名 H0
要输入的字段 Hubble
转换为表格格式时:
>>> from astropy.cosmology import Cosmology, Planck18
>>> renamed_table = Planck18.to_format("astropy.table", rename={"H0": "Hubble"})
>>> renamed_table
<QTable length=1>
name Hubble Om0 Tcmb0 Neff m_nu Ob0
km / (Mpc s) K eV
str8 float64 float64 float64 float64 float64[3] float64
-------- ------------ ------- ------- ------- ----------- -------
Planck18 67.66 0.30966 2.7255 3.046 0.0 .. 0.06 0.04897
>>> cosmo = Cosmology.from_format(renamed_table, format="astropy.table",
... rename={"Hubble": "H0"})
>>> cosmo == Planck18
True
来自子类的I/O#
当一个子类 Cosmology
用于读取文件,则该子类将提供关键字参数 cosmology=<class>
添加到已注册的Read方法。该方法使用这个宇宙学类,而不考虑文件中指示的类,并根据类的签名设置参数的默认值。
>>> from astropy.cosmology import FlatLambdaCDM
>>> cosmo = FlatLambdaCDM.read('<file name>')
>>> cosmo == Planck18
True