首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何从大量的npy文件堆栈中创建Zarr数组?

如何从大量的npy文件堆栈中创建Zarr数组?
EN

Stack Overflow用户
提问于 2022-09-28 01:25:59
回答 1查看 54关注 0票数 0

我有一个4维numpy数组的堆栈,保存为.npy文件。每一个大约1.5GB,我有240个文件,所以大约360 GB的总数和比内存大得多。我想把它们组合成Google云存储桶中的一个Zarr数组。

我的第一次尝试是初始化第一个维度中为空的zarr数组,如下所示

代码语言:javascript
运行
复制
z = zarr.open(
    gcsfs.GCSFileSystem(project=<project-name>).get_mapper(<bucket-name>),
    mode='w',
    shape=(0,256,1440,3),
    dtype=np.float32
)

然后读取每个1.5GB文件并将其append到数组中。

代码语言:javascript
运行
复制
for fn in filenames:
    z.append(np.load(fn))

这似乎是可行的,但这是极其慢.看起来可能需要好几天..。

我是在谷歌云平台上的虚拟机上这样做的,所以我的个人网络速度不应该成为问题。

是否有一种有效和可行的方法来完成这项任务?也许用一个中间步骤使用dask?如有任何建议请见谅。

EN

回答 1

Stack Overflow用户

发布于 2022-09-28 13:19:37

假设npy文件都是相同的形状,您可以做的最简单的事情是:

代码语言:javascript
运行
复制
z = zarr.open(
    gcsfs.GCSFileSystem(project=<project-name>).get_mapper(<bucket-name>),
    mode='w',
    shape=(240,256,1440,3),
    dtype=np.float32
)

for i, fn in enumerate(filenames):
    z[i] = np.load(fn)

当然,这并不使用dask的并行性,但它跳过了元数据的检查和更新,以及追加()必须执行的任何最后块操作。

请注意,这里使用的是默认压缩,blosc。有了这么多数据,当您找到哪种压缩/选项最有效的时候,就很值得了,还可以考虑是否会考虑有损编码来节省带宽和存储成本。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/73875277

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档