首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >Julia1.1如何使用JDL或JDL2将索引矩阵数据主动写入磁盘上的文件?

Julia1.1如何使用JDL或JDL2将索引矩阵数据主动写入磁盘上的文件?
EN

Stack Overflow用户
提问于 2019-03-15 05:16:36
回答 1查看 201关注 0票数 1

我使用的是Julia1.1,谢天谢地,JDL和JDL2似乎都能正常工作。

我想创建一个3d矩阵来保存到一个文件中,该文件在$(x,y,z)$中进行索引,使用

代码语言:javascript
复制
using JLD 
save("File_name","variable_name",variable)

假设我已经这样做了,即

代码语言:javascript
复制
using JLD 
save("some_file","Matrix_t", M_T)

其中M_T是空白的3d零数组。

然后我想保存与$z$轴相关的连续数据帧(就像Matlab中的matfile函数),这样每次我都可以将一个2d数组保存到M_T文件"some_file“中的索引位置。

我读到过g_create "group“的用法。但是,他们使用带有分号的名称,我怀疑这是否是我想要的。

您能帮我将3d Matrix中的顺序数据主动保存到一个文件中吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-03-15 06:25:50

由于JLD.jl支持内存映射数组,因此您可以通过Memory Mapped I/O实现您想要的结果。

下面的代码片段将创建Float64类型的三维数组,并将其保存到JLD文件中。

代码语言:javascript
复制
using JLD
A = zeros(100, 100, 100)
save("mmap.jld", "A", A)

现在,让我们在另一个Julia会话中打开该文件,并将A读取为内存映射数组。请注意,内存映射I/O不会一次将所有数组加载到内存中,因此,即使文件中的数组非常大,您也希望不会耗尽内存。

代码语言:javascript
复制
using JLD
file = jldopen("mmap.jld", "r+", mmaparrays = true) # `r+` important if you want to modify the array
A = read(file, "A")

A是一个内存映射数组。您可以像使用普通3D Array一样使用它。对A的修改将写入磁盘上的文件中。(虽然您可能希望在完成所有更改后使用using Mmap; Mmap.sync!(A),以确保更改真正写入磁盘,但我不确定这一点。)

现在,我们将更改内容

代码语言:javascript
复制
A[:,:,1] .= 100
# close the file
close(file)

您现在可以关闭此会话,然后尝试在另一个会话中打开该文件以查看效果。

请注意,如果您想要在同一会话中再次打开A文件(即A = []; GC.gc()),则需要进行jld垃圾回收。否则将保持文件锁定,因为A是内存映射到文件中的。如果您已经关闭了会话,则不需要执行此操作。

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

https://stackoverflow.com/questions/55172147

复制
相关文章

相似问题

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