分解组合单元#

将一个单位化为不可约部分#

可以将单位或数量分解为其不可约部分。 Unit.decompose()Quantity.decompose() 方法:研究方法。

实例#

用来分解一个单位 decompose() **

>>> from astropy import units as u
>>> u.Ry
Unit("Ry")
>>> u.Ry.decompose()
Unit("2.17987e-18 m2 kg / s2")

若要获取分解中的单元列表, basespowers 可以使用以下属性:

>>> Ry = u.Ry.decompose()
>>> [unit**power for unit, power in zip(Ry.bases, Ry.powers)]
[Unit("m2"), Unit("kg"), Unit("1 / s2")]

您可以使用 bases 关键字参数:

>>> u.Ry.decompose(bases=[u.m, u.N])
Unit("2.17987e-18 N m")

这对于分解到特定系统也很有用。例如,将里德堡能量单位分解为 CGS 单位::

>>> u.Ry.decompose(bases=u.cgs.bases)
Unit("2.17987e-11 cm2 g / s2")

最后,如果你想知道一个单位是如何定义的:

>>> u.Ry.represents
Unit("13.6057 eV")

自动将一个单元组合成更复杂的单元#

相反,可以使用 compose() 方法。因为可能有多个同样好的结果,所以总是返回一个列表。

实例#

用…重组一个单位 compose() **

>>> x = u.Ry.decompose()
>>> x.compose()
[Unit("Ry"),
 Unit("2.17987e-18 J"),
 Unit("2.17987e-11 erg"),
 Unit("13.6057 eV")]

其他一些有趣的例子:

>>> (u.s ** -1).compose()  
[Unit("Bq"), Unit("Hz"), Unit("2.7027e-11 Ci")]

组成可以与 等价物 ::

>>> (u.s ** -1).compose(equivalencies=u.spectral())  
[Unit("m"),
 Unit("Hz"),
 Unit("J"),
 Unit("Bq"),
 Unit("3.24078e-17 pc"),
 Unit("1.057e-16 lyr"),
 Unit("6.68459e-12 AU"),
 Unit("1.4378e-09 solRad"),
 Unit("0.01 k"),
 Unit("100 cm"),
 Unit("1e+06 micron"),
 Unit("1e+07 erg"),
 Unit("1e+10 Angstrom"),
 Unit("3.7e+10 Ci"),
 Unit("4.58743e+17 Ry"),
 Unit("6.24151e+18 eV")]

并不是每一个可以想象的任意派生单元都有一个名称。在这种情况下,系统将尽最大努力将单位减少到尽可能少的符号:

>>> (u.cd * u.sr * u.V * u.s).compose()
[Unit("Wb lm"), Unit("1e+08 Mx lm")]

在系统之间转换#

在这个功能的基础上,可以方便地在单元系统之间进行转换。

实例#

在单位制之间转换:

>>> u.Pa.to_system(u.cgs)
[Unit("10 P / s"), Unit("10 Ba")]

还有一个简写,它只返回许多可能匹配项中的第一个:

>>> u.Pa.cgs
Unit("10 P / s")

不过,这相当于分解成新的系统,然后组合成尽可能复杂的单元 to_system() 添加一些额外的逻辑以返回按最有用的顺序排序的结果:

>>> u.Pa.decompose(bases=u.cgs.bases)
Unit("10 g / (cm s2)")
>>> _.compose(units=u.cgs)
[Unit("10 Ba"), Unit("10 P / s")]