如何从一个品脱数量列表中创建numpy数组

p4rjhz4m  于 2023-01-09  发布在  其他
关注(0)|答案(3)|浏览(142)
import numpy as np
from pint import UnitRegistry 
unit = UnitRegistry()
Q_ = unit.Quantity
a = 1.0*unit.meter
b = 2.0*unit.meter
# some calculations that change a and b 
x=np.array([a.magnitude,b.magnitude])*Q_(1.0,a.units)

我将从变量a和b中创建一个numpy数组,变量a和b是品脱数量。这有点粗糙,因为不能保证a和b有相同的单位。有没有更干净的方法来做?我需要写一个函数吗?

hc8w905p

hc8w905p1#

在创建numpy数组之前,你应该用to_base_units()转换成一个基本单位,不需要为此编写函数,一个简单的列表解析就可以很好地完成。
如果你在x上做大量的数值计算,你可能会想把它保存在一个参考单位中,并把它用作一个原始数组(没有附加的单位),并把单位转换限制在程序的输入/输出阶段。

import numpy as np
from pint import UnitRegistry

unit = UnitRegistry()
Q_ = unit.Quantity

a = 1.0 * unit.meter
b = 2.0 * unit.meter
c = 39.37 * unit.inch

# A list with values in different units (meters and inches)
measures = [a, b, c]

# We use a comprehension list to get the magnitudes in a base unit
x = np.array([measure.to_base_units().magnitude for measure in measures])

print x * Q_(1.0, unit.meter)

>> [ 1.        2.        0.999998] meter
u7up0aaq

u7up0aaq2#

另一个选项是给予数组dtype='object',它允许元素具有不同单位的数组,但可能以牺牲效率和乐趣为代价。

import numpy as np
from pint import UnitRegistry 
unit = UnitRegistry()
a = 1.0*unit.meter
b = 2.0*unit.meter
# some calculations that change a and b 
x=np.array([a, b], dtype='object')
oxcyiej7

oxcyiej73#

现在可以使用pint.Quantityfrom_list方法完成此操作:

import pint
unit = pint.UnitRegistry()
a = 1.0*unit.meter
b = 2.0*unit.meter
print(pint.Quantity.from_list([a, b]))
>> [1.0 2.0] meter

相关问题