python - 在 python 中使用 pint 以米和公里结束
问题描述
使用下面代码中的品脱,我以某种方式最终得到了两个单位:meter
和kilometer
:
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
?
解决方案
我没有找到自动(隐式)但程序化(显式)转换。
基本单位和显式转换
您可以通过可选设置和使用强制转换为配置的默认系统的基本单位: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
(将使用meter
s 和second
s)
然后得到的输出是:
<class 'pint.quantity.build_quantity_class.<locals>.Quantity'>
107661.59454231549 meter ** 1.5 / kilometer ** 0.5 / second
mks
3404.558552792702 meter / second
default system和base unit的概念似乎从0.7 版本开始就存在了。
推荐阅读
- php - PHP将对象声明为函数参数的数组
- firebase - 如何将 Firebase Cloud Functions 日志导出到文件?
- python - 为什么我的数据保存不适用于 python 上的 pickle?
- c++ - 我的 C++ 代码可以处理 100GB 以上的文件复制吗?
- php - Lumen 5.4:PHPUnit:如何测试授权?
- browser - 我可以创建一个浏览器扩展来阻止下载特定文件类型并将用户转发到链接吗?
- java - 如何使用 IntelliJ 编译 Java 项目并在终端中运行 (NoClassDefFoundError)
- sql - 尝试将 varchar 转换为十进制的 SQL 错误
- java - 为什么我的程序会抛出这个 JNI 错误?
- html - 网页不接受从 vba 发送的文本