【问题标题】:How to convert numpy array to a Zarr array如何将 numpy 数组转换为 Zarr 数组
【发布时间】:2021-02-02 15:06:45
【问题描述】:

假设我将一个简单的列数据框转换为一个 numpy 数组:

gdf.head()
>>>

     rid    rast
0      1    01000001000761C3ECF420013F0761C3ECF42001BF7172...
1      2    01000001000761C3ECF420013F0761C3ECF42001BF64BF...
2      3    01000001000761C3ECF420013F0761C3ECF42001BF560C...
3      4    01000001000761C3ECF420013F0761C3ECF42001BF7F25...
4      5    01000001000761C3ECF420013F0761C3ECF42001BF7172...

raster_np = gdf.to_numpy()
raster_np[0][0]
>>> array([1, '01000001000761C3E.........], dtype=object))   

我的任务是将 numpy 数组转换为 Zarr 文件格式(因为 rast 值的大小和数据帧的大小,可能需要分块和压缩以及新的 .zarr 文件我认为可以在 S3/云存储环境中更好地利用)。我创建了一个简单的Zarr 数组,如下所示:

 z_test = z.zeros(shape=(10000, 2), chunks=(10000, 2))
 z_test
 >>> <zarr.core.Array (10000, 2) float64>

现在,如何将raster_np 中的数据放入z_test 并保留Zarr 属性?简单地使用z_test = raster_np 显然是行不通的。也许我对Zarr 有一些误解。有什么建议吗?

【问题讨论】:

    标签: arrays python-3.x numpy data-conversion zarr


    【解决方案1】:

    由于您的初始数组是混合类型(对象),您需要创建具有正确数据类型的 zarr 数组,并对数据进行编码。你可以使用来自numcodecs的JSON编码器

    import numcodecs
    
    z_test = zarr.zeros(shape=(10000, 2), dtype=object, object_codec=numcodecs.JSON())
    z_test[:] = raster_np
    

    但是,如果您将ridraster 列分别存储为具有intstr 数据类型的单独数组,或者将十六进制转换为另一个基数,您将获得更好的性能。

    【讨论】:

      猜你喜欢
      • 2021-12-18
      • 2021-06-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-12-29
      相关资源
      最近更新 更多