如何获得Sympy物理量的浮动值?

时间:2017-07-31 11:14:02

标签: python sympy

例如,我有值a

import sympy.physics.units as u

a = 133.05*u.kg/u.m

我想将此物理量转换为浮点值,我知道的唯一方法是float(a/(u.kg/u.m))

4 个答案:

答案 0 :(得分:1)

您可以像这样使用as_coeff_Mul

>>> a = 133.05*u.kg/u.m
>>> a.as_coeff_Mul()
(133.05, kg/m)

所以浮动值应该是

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

答案 1 :(得分:0)

好吧,如果你想获得没有单位的价值,你可以拆分字符串。这是我能想到的直截了当的方式。

 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

答案 2 :(得分:0)

您可以使用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])))

答案 3 :(得分:0)

如果您知道表达式的单位或物理量,那么以下是我迄今为止找到的将其量级设为浮点数的最可靠方法。

案例 1:您知道表达式的单位

def to_float(expr, expr_unit):
    return float(expr / expr_unit)

示例:

import sympy.physics.units as un

flow_rate = 50 * un.m ** 3 / un.h
unit = un.m ** 3 / un.h

print(to_float(flow_rate, unit))
# 50.0

案例 2:您只知道测量的是哪个物理量

https://en.wikipedia.org/wiki/List_of_physical_quantities

from sympy.physics.units import convert_to

def to_float_as(expr, unit):
    converted = convert_to(expr, unit)
    return to_float(converted, unit)

示例:

假设您有多个单位的多个测量值,但所有测量值都是长度,并且您有兴趣对它们求和。

from functools import partial
import sympy.physics.units as un

measurements = [
    50 * un.m,
    3 * un.km,
    2.5 * un.mi,
]

sum_in_meters = sum(map(partial(to_float_as, unit=un.m), measurements))

print(sum_in_meters)
# ~7073.36