gpt4 book ai didi

python - 带有掩码数组的 xarray,同时保留整数数据类型

转载 作者:太空宇宙 更新时间:2023-11-03 15:59:05 27 4
gpt4 key购买 nike

目前,我的代码大量使用具有多维数据类型的结构化掩码数组,具有数十个字段和数千字节的项目大小。看来 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) 我的许多整数数据类型都是位字段,不能表示为 float 。尽管 int32 位域可以无损地表示为 float64,但来回切换很丑陋且容易出错。

是否可以在保留整数 dtype 的同时将 xarray.Dataset 与掩码数组一起使用?


编辑: 看来问题出现在_maybe_promote .另见 github issue .

最佳答案

不幸的是,xarray 不支持屏蔽数组或任何形式的具有缺失值的整数数据类型。这种选择的原因与 pandas 不(当前)不支持整数 NA 的原因相同,如 Cavaets and Gotchas 下的 pandas 文档所述。 .我们需要一个支持 NumPy 数组缺失值的整数 dtype,不幸的是,它不存在。

我同意这对于具有缺失值的图像来说不是一个非常令人满意的解决方案,但在许多情况下我发现它足以处理非屏蔽整数数据,仅在必要时转换为 float (并屏蔽缺失值)用于算术(例如,使用 .fillna())。

关于内存使用,我建议尝试使用 dask 的 xarray ,它允许以流式或分布式方式执行大多数数组操作。

关于python - 带有掩码数组的 xarray,同时保留整数数据类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41505699/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com