现在,我有一个带有一些符号的公式。这些符号有单位。有谁知道一个python库来评估公式的维度。
我检查了sympy
和pint
。
Sympy
似乎是基于物理的单位制,但我要处理的是像美元或公斤这样的通用单位。Sympy 似乎没有定义这些。
pint
可以使用 定义单位UnitRegistry.define
,但除非表达式中的每个元素都有一个单位,否则它不起作用。
from pint import UnitRegistry
ureg = UnitRegistry(filename=None)
ureg.define("KG = []")
ureg.define("MT = 1000 * KG")
ureg.define("USD = []")
ureg.define("JPY = []")
X = 1 * ureg.USD / ureg.MT
Y = 1 * ureg.JPY / ureg.USD
formula = (X + 50) / 1000 * Y
formula.u
=> JPY/USD
我想要得到的结果是JPY/KG
or USD/MT
。这个不希望的结果是因为X + 50
将是无量纲的。如果我手动定义数字的单位,我会得到一个准确的答案。但是这样就不需要维度分析了。
我不迷恋pint
,sympy
。有没有什么好的方法来进行维度分析?
附言
感谢@wsdookadr,我想展示一些例子。我想做的是评估公式的维度(可能用字符串表示)。
让我有两个公式。
F1 = (X + 50) / 1000 * Y
F2 = (X + 1000) * 0.5
这个 X 和 Y 的单位和前面的例子一样。如果我可以进行维度分析,结果将如下所示。
F1 = ([USD/MT] + 50) / 1000 * [JPY/USD]
= 10^-3 [USD/MT] * [JPY/USD]
= 10^-3 [JPY/MT]
= [JPY/KG]
F2 = ([USD / MT] + 1000) * 0.5
= [USD/MT]