在 Julia 中有选择地从 jld 文件加载元素

Selectively loading elements from jld file in Julia

我在 Julia 中保存了一个名为 results 的对象 JLD 包写作

@save "res.jld" results

对象results是一个

81-element Array{Tuple{Int64,Float64,Array{Array{Array{Int64,1},1},1},Array{Array{Array{Int64,1},1},1},Array{Int64,1}},1}

其中每个元素有 5 个元素:Int64Float64Array{Array{Array{Int64,1},1},1}Array{Array{Array{Int64,1},1},1}Array{Int64,1}

如何在不加载整个文件的情况下访问每个元素的前 2 个元素(Int64Float64),因为它需要大量内存。我想避免 @load "res.jld" 因为它太重了。

恐怕您正在寻找的东西不太可能。有 hyperslabbing and it is also partially supported by JLD (simple example here)。它将允许您逐一阅读每个元素。但是,它不能让您只加载每个元素的前两个组件。

尽管如此,一个一个地迭代每个元素可能仍然有用,因为您可以避免将完整的数据集加载到内存中(因此您可以处理一个太大而无法保存在内存中的数据集)。不过,它可能并不比加载完整数据集(如果可以)快。

创建一些(简化的)假数据并将其保存到磁盘

using JLD
results = [(i, Float64(i), rand(3)) for i in 1:1000];
@save "res.jld" results

基本上,我上面描述的应该是这样的

jldopen("res.jld") do f
    for k in 1:length(f["results"])
        f["results"][k][1][1:2] # read k-th element and extract first two components.
    end
end