首页 > 解决方案 > 在 python 中使用 pint 以米和公里结束

问题描述

使用下面代码中的品脱,我以某种方式最终得到了两个单位:meterkilometer

107661.59454231549 米**1.5/公里**0.5/秒

import math
import pint

u = pint.UnitRegistry()
Q_ = u.Quantity

R_mars = 3396 * u.km
m_mars = 6.419 * 10 ** 23 * u.kg
G = 6.674 * 10 ** (-11) * u.m ** 3 / u.kg / u.s ** 2
R = 300 * u.km + R_mars

def calc_orbital_v(M, R):
    return (G * M / R) ** (1/2)

print(calc_orbital_v(m_mars, R))

为什么品脱不会自动转换为统一单位,要么meter要么kilometer

标签: pythonpint

解决方案


我没有找到自动(隐式)但程序化(显式)转换。

基本单位和显式转换

您可以通过可选设置和使用强制转换为配置的默认系统的基本单位ureg.default_system.to_base_units()

import math
import pint

ureg = pint.UnitRegistry()
Q_ = ureg.Quantity

R_mars = 3396 * ureg.km
m_mars = 6.419 * 10 ** 23 * ureg.kg
G = 6.674 * 10 ** (-11) * ureg.m ** 3 / ureg.kg / ureg.s ** 2
R = 300 * ureg.km + R_mars

def calc_orbital_v(M, R):
    return (G * M / R) ** (1/2)

speed = calc_orbital_v(m_mars, R)

print(type(speed))
print(speed)  # before: meters and kilometers mixed
print(ureg.default_system)  # the default unit system can be configured
print(speed.to_base_units())  # after: converted to base-unit meters

笔记:

  • 为了与官方品脱文档保持一致,将 unit-registry 重命名为ureg(而不是您的给定u
  • 单位系统默认为mks(将使用meters 和seconds)

然后得到的输出是:

<class 'pint.quantity.build_quantity_class.<locals>.Quantity'>
107661.59454231549 meter ** 1.5 / kilometer ** 0.5 / second
mks
3404.558552792702 meter / second

default systembase unit的概念似乎0.7 版本开始就存在了。


推荐阅读