我用results
程序包编写的方式在Julia中保存了一个名为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个元素:Int64
,Float64
,Array{Array{Array{Int64,1},1},1}
,Array{Array{Array{Int64,1},1},1}
和Array{Int64,1}
。
如何在不加载整个文件的情况下访问每个元素的前两个元素(Int64
和Float64
),因为它需要大量的内存。我想避免使用@load "res.jld"
,因为它太重了。
答案 0 :(得分:3)
恐怕您要找的东西不太可能。有hyperslabbing,JLD也有partially supported(简单示例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