如何将 numpy 数组转换为 Zarr 数组

问题描述 投票:0回答:2

假设我将简单的列数据框转换为 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
2个回答
0
投票

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

numcodecs

中的 JSON 编码器
import numcodecs

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

但是,如果将

rid
raster
列存储为分别具有
int
str
数据类型的单独数组,或者将十六进制转换为其他基数,将会获得更好的性能。


© www.soinside.com 2019 - 2024. All rights reserved.