jld2 读取部分数据有哪些办法?

我计算得到了一些大矩阵,叫它们为R,G,H。我把它们存在一个data.jld2文件中。我知道可以通过以下命令读取部分的数据,比如G矩阵的第三行第一列的元素:

G31=jldopen("/Users/zhan/Desktop/julia/100G/data.jld2", "r")["G"][3,1]

网上有不少文章说打开文件后,应当要关闭文件。这种方法显然不能关闭。我后面试了一下,不关闭似乎也没影响,所以也想问一下,如果不关闭,在什么地方容易出问题?

如果要关闭打开文件的话,相应的代码可以要改写成:

fid=jldopen("/Users/zhan/Desktop/julia/100G/data.jld2", "r")
G31=fid["G"][3,1]
close(fid)

这种写法似乎有点繁。

我类比着用@load来,但是没成功,应该是自己不熟悉造成的。

请问,读取jld2文件中某个成员的部分数据有哪些办法?有没有比较简单安全的办法?

  1. 就我个人的使用经验而言,Julia中的文件I/O在Linux/Mac下面如果不关闭stream对文件读写也没啥显著影响。理论上很多教程上会说如果不关闭会有可能file leak啥的,这在C/Fortran之类的语言中的确是这样,但我不清楚的是对于garbage collector这一类语言到底是怎么运作的。而如果是在Windows下面,如果不手动关闭文件,会在程序执行稍后遇到file lock相关的报错。

  2. 常见写法是用do-block:

jldopen("example.jld2", "r") do file
    G31 = file["G"][3,1]
end
1 个赞

@henry2004y 谢谢您的解惑和解答!