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)