文章目录
- 简介
- 单位和物理量*
- 格式化输出
简介
pint是Python的物理单位计算系统,通过指定量纲,避免因单位混淆导致的计算错误。支持pip和conda安装。
pip install pint -i https://pypi.tuna.tsinghua.edu.cn/simple conda install -c conda-forge pint单位和物理量*
UnitRegistry是pint中的核心类,内置了完整的国际单位制(SI)、英制单位及词头(如 kilo, milli),并维护它们之间的数学等价关系。
frompintimportUnitRegistry ureg=UnitRegistry()ureg.meter# <Unit('meter')>30.0*ureg.meter# <Quantity(30.0, 'meter')>从示例代码可知,单位的类型是Unit,单位和数值相乘之后,输出的类型是Quantity,即物理量。pint提供了更便捷的物理量生成方案,下面几行代码的返回值完全一致。
3.14*ureg.meter ureg.Quantity(3.14,ureg.meter)ureg.Quantity(3.14,"meter")ureg("3.14meter")ureg("3.14m")这些单位可以在安装路径中的default_en.txt中查看。
通过to方法,可以实现单位的转换;调用to_compact,可将单位转换为更紧凑的形式。
ureg("3.14m").to("mm")# <Quantity(3140.0, 'millimeter')>q=ureg("3.14km")*ureg("1mm")# <Quantity(3.14, 'kilometer * millimeter')>q.to("mm**2")# <Quantity(3140000.0, 'millimeter ** 2')>q.to_compact()# <Quantity(3.14, 'meter ** 2')>格式化输出
pint提供了多种格式化输出方案,其中pretty模式更适合命令行打印输出,示例如下
ureg=pint.UnitRegistry()q=2.3e-6*ureg.m**3/(ureg.s**2*ureg.kg)print(q)# 2.3e-06 meter ** 3 / kilogram / second ** 2f"{q:~P}"# '2.3×10⁻⁶ m³/kg/s²'f"{q:~^P}"# '2.3×10⁻⁶ kg⁻¹·m³·s⁻²'f"{q:~#P}"# '2.3 mm³/g/s²'f"{q:P#~}"# '2.3 mm³/g/s²'f"{q:.2f~#P}"# '2.30 mm³/g/s²'f"{q:#~}"# '2.3 mm ** 3 / g / s ** 2'其中,#表示在输出前,先调用Quantity.to_compact();~表示试用单位的符号,而非标准名称,有了这个,meter变成m;;^表示使用负指数代替除号,有了这个【/kg/s²】变成【·m³·s⁻²】。
pint还支持其他模式,对于形如f"{q:#~P}",将P替换为其他模式的字母,其结果如下表所示
f"{q:#~D}"f"{q:#~C}"f"{q:#~P}"f"{q:#~H}"f"{q:#~L}"f"{q:#~Lx}"| 标记 | 说明 | 示例 |
|---|---|---|
| D | 默认(default) | 2.3 mm ** 3 / g / s ** 2 |
| C | 紧凑(compact) | 2.3 mm**3/g/s**2 |
| P | pretty | 2.3 mm³/g/s² |
| H | HTML | 2.3 mm3/(g s2) |
| L | latex | ‘2.3\ \frac{\mathrm{mm}^{3}}{\left(\mathrm{g} \cdot \mathrm{s}^{2}\right)}’ |
| Lx | latex siunitx | \SI[]{2.3}{\milli\meter\cubed\per\gram\per\second\squared} |