“注册”一个单位并使用 sympy 前缀?

问题描述 投票:0回答:2
import sympy.physics.units as u
u.find_unit('cm')  # -->  'cm' found
u.find_unit('km')  # -->  'km' found

# so I can do
float(u.convert_to(2 * u.cm, u.km) / u.km)

现在我想注册

nF
(纳法拉)、
pF
(皮法拉)和
uF
(微法拉) 所以我可以像这样进行快速转换(以及其他复杂的计算):

float(u.convert_to(2 * u.uF, u.nF) / u.nF)

我的一个想法就是这样做:

u.uF = 1e-6 * u.F
u.nF = 1e-9 * u.F
float(u.convert_to(36 * u.uF, u.nF) / u.nF)

这有什么坏处吗?我看到的一个问题是,如果我保留该单位,它只会在底座 (F) 中表示。另外,我需要检查以确保我没有覆盖

u
的任何属性。此外,
u.find_unit("nF")
返回一个空白列表。

关于如何在我们的单位中应用前缀的好的参考文献并不多。

python sympy dimension units-of-measurement
2个回答
3
投票

如果您查看 sympy.physicals.units.definitions.unit_definitions.py 您将看到如何设置定义的示例,例如

mg = milligram = milligrams = Quantity("milligram", abbrev="mg")
mg.set_global_relative_scale_factor(milli, gram)

所以

>>> from sympy.physics.units import *
>>> nf=Quantity('nanoFarad', abbrev='nF')
>>> nf.set_global_relative_scale_factor(nano, farad)
>>> nf
nF
>>> nf.convert_to(farad)
F/1000000000

0
投票

我不是同情专家,但我认为以下方式可能更稳健(参见这个):

>>> import sympy.physics.units as syu
>>> setattr(syu, 'nanoFarad', syu.Quantity('nanoFarad', abbrev='nF', is_prefixed=True))
>>> setattr(syu, 'nF', getattr(syu, 'nanoFarad'))
>>> getattr(syu, 'nanoFarad').set_global_relative_scale_factor(syu.nano, syu.farad)
>>> syu.nF.convert_to(syu.F)
farad/1000000000

另一个例子:

>>> setattr(syu, 'kilogramforce', syu.Quantity('kilogramforce', abbrev='kgf', is_prefixed=True))
>>> setattr(syu, 'kgf', getattr(syu, 'kilogramforce'))
>>> getattr(syu, 'kilogramforce').set_global_relative_scale_factor(9.80665, syu.newton)
>>>
>>> syu.kgf.convert_to(syu.N)
9.80665*newton

对于某些单位

is_prefixed
(‘毫-’、‘千-’等)应设置为
False

© www.soinside.com 2019 - 2024. All rights reserved.