分解组合单元#
将一个单位化为不可约部分#
可以将单位或数量分解为其不可约部分。 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")
若要获取分解中的单元列表, bases
和 powers
可以使用以下属性:
>>> 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")]