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

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

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

最佳答案

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

import numcodecs

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

但是,如果您存储 rid,您将获得更好的性能和 raster列作为单独的数组,带有 intstr数据类型,或将十六进制转换为另一个基础。

关于arrays - 如何将 numpy 数组转换为 Zarr 数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64434117/

相关文章:

c - C程序如何逆序打印字符数组

python - 如何将单个元素和元组压缩为一个元组?

python - 在 numpy 中,将 3 维数组的第二维乘以 1 维数组的最快方法是什么?

php - 基于 php 中的键对数组值进行分组?

python-3.x - 如何从 python 获取有关 spark 作业和阶段的数据

python - python 2.7 中的等效 urllib.parse.quote()

python - python 中 numpy 数组的 len()

python - 为什么矢量化的 numpy 方法在 python ssh 子进程中只使用一个核心

python - 从 numpy 数组中删除行不起作用

php - 从三重内连接获得正确的结果