![](/img/trans.png)
[英]pint-pandas import error ModuleNotFoundError: No module named 'pint.quantity' (pint is imported)
[英]Standard format for quantity in derived dimension in `pint`
TLDR:我希望在默认情况下将特定(派生)维度中的pint
数量转换为预设单位。
细节:
我处理 5 个维度,如下所述。 请注意,[power](通常以 MW 为单位)和 [price](通常以 Eur/MWh 为单位)是派生的维度。
# units.txt
# Base dimensions and their units
hour = [time] = h = hr
megawatthour = [energy] = MWh
euro = [currency] = Eur = €
# Derived dimensions and their units
[power] = [energy] / [time]
megawatt = megawatthour / hour = MW
[price] = [currency] / [energy]
euro_per_MWh = euro / megawatthour = Eur/MWh
我的问题:是否可以指定尺寸为 [power] 的计算量默认转换为 MW?
下面是一个例子:
import pint
ureg = pint.UnitRegistry("units.txt",)
ureg.default_format = ".0f~P"
energy = 100 * ureg.MWh
time = 4 * ureg.h
revenue = 4000 * ureg.euro
price = revenue / energy
power = energy / time
print(energy, time, revenue, price, power)
# 100 MWh 4 h 4000 Eur 40 Eur/MWh 25 MWh/h
在这里,功率以MWh/h表示,因为它的计算方式,我可以通过调用power.to('MW')
将其“转换”为MW 。 每次计算此维度中的数量时是否可以自动执行此操作?
请注意,对所有数量执行一揽子.to_base_units()
会将其恢复为MWh/h 。
评论:
问题是 MWh 在units.txt
文件中被定义为基本单位,而不是使用 MW 作为基本单位并从 MW 和小时构建 MWh。 一旦单元构造被排序, .to_base_units()
将产生所需的结果。
# units-2.txt
# Base dimensions and their units
hour = [time] = h = hr
megawatt = [power] = MW
euro = [currency] = Eur = €
# Derived dimensions and their units
[energy] = [power] * [time]
megawatthour = megawatt * hour = MWh
[price] = [currency] / [energy]
euro_per_MWh = euro / megawatthour = Eur/MWh
>>> def test_defs(file):
... ureg = pint.UnitRegistry(file,)
... ureg.default_format = ".0f~P"
...
... energy = 100 * ureg.MWh
... time = 4 * ureg.h
... revenue = 4000 * ureg.euro
...
... price = revenue / energy
... power = energy / time
...
... print(energy, time, revenue, price, power)
... print(power.to('MW'))
... print(power.to_base_units())
...
>>> test_defs("units.txt")
100 MWh 4 h 4000 Eur 40 Eur/MWh 25 MWh/h
25 MW
25 MWh/h
>>> test_defs("units-2.txt")
100 MWh 4 h 4000 Eur 40 Eur/MWh 25 MWh/h
25 MW
25 MW
>>>
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.