arrays - 如何将 numpy 数组转换为 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
值的大小和数据帧的大小,可能需要分块和压缩,并且可以在 S3/云上更好地利用新的 .zarr 文件存储环境,我假设)。我创建了一个简单的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 数组,并对数据进行编码。您可以使用 JSON 编码器numcodecs
import numcodecs
z_test = zarr.zeros(shape=(10000, 2), dtype=object, object_codec=numcodecs.JSON())
z_test[:] = raster_np
但是,如果您将rid
和raster
列分别存储为具有int
和str
数据类型的单独数组,或者将十六进制转换为另一个基,您将获得更好的性能。
推荐阅读
- php - $new 作为 php 关键字中的变量
- javascript - 使用默认值生成 unqiue 属性
- android - Firebase 通知未显示在设备上
- autodesk-forge - 无法加载到许多纹理时 Autodesk forge 挂起
- python - 使用 manylinux + auditwheel pip Wheels 与 Conda 打包
- sql - 从 Oracle 表生成插入
- rust - 将借来的值保存在集合中的 Rust 方法是什么?
- apache-kafka - Kafka Streams - 如何更好地控制内部创建的状态存储主题的分区?
- git - GIT - 致命:不能使用 .idea/ 作为排除文件
- jquery - 如果用户名和电子邮件都可用,如何显示按钮