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

3
假设我已经将一个简单的列数据框转换为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有所误解。 有什么建议吗?

1个回答

0

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

import numcodecs

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

如果你将ridraster列分别存储为具有intstr数据类型的数组,或者将十六进制转换为另一种基础,那么你将获得更好的性能。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接