如何简洁地获取Sympy表达式的单位

3

我正在处理带有单位的Sympy表达式。这里有一个简单的例子:

from sympy.physics.units import newton, meter
atmosphere = 101325. * newton / (meter **2)

在上面的例子中,有没有一种简洁的方法从变量 atmosphere 中获取单位,即 newton/(meter **2)

以下代码可以运行,至少在上面的例子中是这样。这是最好的方法吗? get_units = lambda expr: expr.subs({x: 1 for x in expr.args if x.is_number}) - butterwagon
2个回答

2

你的方法很好,但我会用has(Quantity)代替检查is_number

from sympy.physics.units import Quantity,
def unit(expr):
    return expr.subs({x: 1 for x in expr.args if not x.has(Quantity)})

那么它也可以处理象符号金额一样的东西,比如

g = symbols('g')
acc = g*meter/second**2
unit(acc)  # meter/second**2 

这个解决方案在某些情况下不起作用:unit(1*meter)会出现TypeError: name should be a string, not <class 'sympy.core.numbers.One'>的错误。 - undefined

2

我认为对于我的应用来说,正确的答案实际上是expr.as_coeff_Mul(),它返回元组(c, x),其中c是一个数字,x是符号的乘积。如果你的表达式只包含数字和单位,这将直接给出(magnitude, units)


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接