宇宙学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