宇宙学I/O详细信息#
泡菜中的宇宙学#
为 temporary 存储是序列化和反序列化Cosmology对象的一种简单方法,它使用 pickle 模块。例如,这对于传递 Cosmology 在线程之间。
>>> import pickle
>>> from astropy.cosmology import Planck18
>>> with open("planck18.pkl", mode="wb") as file:
... # use protocol 5 to ensure byteorder is preserved (not switched to native)
... pickle.dump(Planck18, file, protocol=5)
>>> # 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