pint 与 numpy 的连接的用法
pint's usage with numpy's concatenate
我有这个玩具示例,我正在使用 pint 和 numpy -
import numpy as np
from pint import UnitRegistry
ureg = UnitRegistry()
Q_ = ureg.Quantity
args = []
for k in range(0,17):
uwnd = Q_(np.ones((1,73,144)),'meter / second')
args.append(uwnd)
uwndTot = np.vstack(args)
print(uwndTot.shape)
for element in args:
print(type(element))
uwndTot 的形状是
(17,73,144)
如上图args中元素的类型为
<class 'pint.quantity.build_quantity_class.<locals>.Quantity'>
但是如果我按以下方式打印出 uwndTot 的类型,我会得到
for element in uwndTot:
print(type(element))
我明白了
<class 'numpy.ndarray'>
所以我无法从此过程中提取 uwnd 的单位。这是正确的行为吗?为什么在我发出调用时类型会发生变化
np.vstack(args)
或
np.concatenate(args,axis = 0)
我希望能够使用 vstack 或连接。还有别的办法吗?
更新
我有一堆 netCDF 文件,当我读入这些文件时,它们的形状是 (73,144)。我需要将它们的 'n' 连接起来,这将给我一个 numpy 形状数组
(17,73,144)。这些 netCDF 文件的单位是米/秒或其他单位。我的计算中需要这些单位。
这是我们在 MetPy 中使用的方法,确保所有源数组都具有兼容的维度:
def concatenate(arrs, axis=0):
dest = 'dimensionless'
for a in arrs:
if hasattr(a, 'units'):
dest = a.units
break
data = []
for a in arrs:
if hasattr(a, 'to'):
a = a.to(dest).magnitude
data.append(np.atleast_1d(a))
return units.Quantity(np.concatenate(data, axis=axis), dest)
我有这个玩具示例,我正在使用 pint 和 numpy -
import numpy as np
from pint import UnitRegistry
ureg = UnitRegistry()
Q_ = ureg.Quantity
args = []
for k in range(0,17):
uwnd = Q_(np.ones((1,73,144)),'meter / second')
args.append(uwnd)
uwndTot = np.vstack(args)
print(uwndTot.shape)
for element in args:
print(type(element))
uwndTot 的形状是
(17,73,144)
如上图args中元素的类型为
<class 'pint.quantity.build_quantity_class.<locals>.Quantity'>
但是如果我按以下方式打印出 uwndTot 的类型,我会得到
for element in uwndTot:
print(type(element))
我明白了
<class 'numpy.ndarray'>
所以我无法从此过程中提取 uwnd 的单位。这是正确的行为吗?为什么在我发出调用时类型会发生变化
np.vstack(args)
或
np.concatenate(args,axis = 0)
我希望能够使用 vstack 或连接。还有别的办法吗?
更新 我有一堆 netCDF 文件,当我读入这些文件时,它们的形状是 (73,144)。我需要将它们的 'n' 连接起来,这将给我一个 numpy 形状数组 (17,73,144)。这些 netCDF 文件的单位是米/秒或其他单位。我的计算中需要这些单位。
这是我们在 MetPy 中使用的方法,确保所有源数组都具有兼容的维度:
def concatenate(arrs, axis=0):
dest = 'dimensionless'
for a in arrs:
if hasattr(a, 'units'):
dest = a.units
break
data = []
for a in arrs:
if hasattr(a, 'to'):
a = a.to(dest).magnitude
data.append(np.atleast_1d(a))
return units.Quantity(np.concatenate(data, axis=axis), dest)