目前,我的代码使用了大量多维dtype的结构化掩码数组,其中有数十个字段和许多千字节的项目大小。看起来xarray
可能是一个很好的替代方案,但当我尝试传递一个掩码数组时,它会将其dtype更改为float:
In [137]: x = arange(30, dtype="i1").reshape(3, 10)
In [138]: xr.Dataset({"count": (["x", "y"], ma.masked_where(x%5>3, x))}, coords={"x": range(3), "y":
...: range(10)})
Out[138]:
<xarray.Dataset>
Dimensions: (x: 3, y: 10)
Coordinates:
* y (y) int64 0 1 2 3 4 5 6 7 8 9
* x (x) int64 0 1 2
Data variables:
count (x, y) float64 0.0 1.0 2.0 3.0 nan 5.0 6.0 7.0 8.0 nan 10.0 ...
这对我来说是不理想的,因为(1)我的数据集的内存消耗会急剧增加(它已经很大了),而且(2)我的许多整数类型是位字段,不能表示为浮点数。虽然 int32
位域可以无损地表示为 float64
,但来回转换很麻烦且容易出错。
是否可能在保留整数 dtypes 的同时使用带掩码数组的 xarray.Dataset
?
编辑:看起来问题发生在 _maybe_promote
。另请参见 github 问题。