在sympy.physics.units
个相同的单位中,当它们在方程中使用时会自动简化。但是,当单位是相同维度的不同比例时,它们不会自动简化。例如:
from sympy.physics.units import *
(5000 * gram) / (2 * gram)
# 2500
(5 * kilogram) / (2 * gram)
# (5 * kilogram) / (2 * gram)
5 * gram + 1 * kilogram
# 5*gram + kilogram
5 * gram + 1000 * gram
# 1005*gram
1000*liter/(5000*liter)
# 1/5
1000*liter/(5*meter**3)
# 200*liter/meter**3
是否有一种简单的方法可以强制进行单位简化,至少在单位是同一维度的不同比例的情况下?
我正在寻找与在所有单位上使用.subs()
相同的效果,只是自动使用表达式中已包含的信息,相当于
((5 * kilogram) / (2 * gram)).subs({gram: gram, kilogram: 1000 * gram, ...})
答案 0 :(得分:1)
规模问题可以通过单位制的print_unit_base
方法来解决。例如,
from sympy.physics.units.systems import MKS
expr = (5 * kilogram) / (2 * gram)
new_expr = expr.xreplace({q: MKS.print_unit_base(q) for q in expr.atoms(Quantity)})
现在new_expr
是2500.
使用的更简单的函数是convert_to(expr, kilogram)
(也返回2500),但这取决于知道质量单位是一个问题。 print_unit_base
统一了给定单位系统的所有单位。
使用liter
,因为它不是真正的前缀米立方体,我们需要convert_to
:
expr2 = 1000*liter/(5*meter**3)
convert_to(expr2, meter) # 1/5