Python 如何获取Sympy的浮点值';物理量是多少?

Python 如何获取Sympy的浮点值';物理量是多少?,python,sympy,Python,Sympy,例如,我有一个值a import sympy.physics.units as u a = 133.05*u.kg/u.m 我想把这个物理量转换成浮点值,我知道的唯一方法是浮点(a/(u.kg/u.m)) 如果你想得到没有单位的值,你可以拆分字符串。这是我能想到的最直接的方法 In [1]: import sympy.physics.units as u a = 133.05*(u.kg/u.m) new_a = float(str(a).split

例如,我有一个值
a

import sympy.physics.units as u

a = 133.05*u.kg/u.m

我想把这个物理量转换成浮点值,我知道的唯一方法是
浮点(a/(u.kg/u.m))

如果你想得到没有单位的值,你可以拆分字符串。这是我能想到的最直接的方法

 In [1]: import sympy.physics.units as u

         a = 133.05*(u.kg/u.m)

         new_a = float(str(a).split('*')[0])

         print(new_a)

 Out[1]: 133.05

您可以使用
a.args
获取所需信息。它返回一个元组,首先包含数值,然后包含单位。例如:

import sympy.physics.units as u
a = 133.05*u.kg/u.m
print(a.args[0])
print(type(float(a.args[0])))
您可以这样使用:

>>> a = 133.05*u.kg/u.m
>>> a.as_coeff_Mul()
(133.05, kg/m)
所以浮点值是

>>> a.as_coeff_Mul()[0]
133.05

如果您知道表达式的单位或物理量,那么下面是我迄今为止发现的最可靠的方法,可以将其大小作为float

案例1:你知道表达式的单位
def到_浮点(expr,expr_单位):
返回浮动(expr/expr\u单位)
例如:

将sympy.physics.units导入为un
流量=50*un.m**3/un.h
单位=un.m**3/un.h
打印(至浮点数(流速,单位))
# 50.0
案例2:您只知道测量了哪个物理量

从sympy.physics.units导入转换为
def至浮球组件(expr,单位):
转换=转换为(表达式,单位)
返回到浮点数(已转换,单位)
例如:

假设你有多个测量单位,但都测量长度,你有兴趣求和

从functools导入部分
将sympy.physics.units作为un导入
测量=[
50*un.m,
3*un.km,
2.5*un.mi,
]
以米为单位的总和=总和(图(部分(至浮点数,单位=un.m),测量值))
打印(总和单位:米)
# ~7073.36

你说得对!奇怪的想法发生在这里…例如,我首先回答了问题,我的答案是正确的,并且有效。其实是一样的。我希望能有一个评论来解释为什么这样更好:)好吧,方法有很大的不同:转换为字符串并执行字符串操作,或者使用sympy的内置finctionality。因此,OP决定了他最喜欢的方法,并且可能更好地满足他的需求。他可能正在研究大量的变量,并且发现这种方法更快。或者,他喜欢这样的额外好处:不用再进行串接操作,就可以轻松地将设备分开。干得好!非常感谢。如果乘以π或其他数学公式,则不起作用constant@Rainb实际上,您必须首先转换为浮点。例如,可以使用
打印(sympy.nfloat(a.args[0])
。当然,在这种情况下,不要忘记先导入sympy。