提问人:gwydion93 提问时间:10/20/2020 更新时间:12/4/2021 访问量:1117
如何将numpy数组转换为Zarr数组
How to convert numpy array to a Zarr array
问:
假设我将一个简单的列数据帧转换为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 文件可以在 S3/云存储环境中更好地使用,我假设)。我创建了一个简单的数组,如下所示:Zarr
rast
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
答:
0赞
user2653663
12/4/2021
#1
由于初始数组是混合类型(对象),因此需要使用正确的数据类型创建 zarr 数组,并对数据进行编码。您可以从以下位置使用 JSON 编码器numcodecs
import numcodecs
z_test = zarr.zeros(shape=(10000, 2), dtype=object, object_codec=numcodecs.JSON())
z_test[:] = raster_np
但是,如果将 and 列存储为分别具有 和 数据类型的单独数组,或者将十六进制转换为另一个基础,则性能会更好。rid
raster
int
str
评论