在 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 个元素:Int64
、Float64
、Array{Array{Array{Int64,1},1},1}
、Array{Array{Array{Int64,1},1},1}
和 Array{Int64,1}
。
如何在不加载整个文件的情况下访问每个元素的前 2 个元素(Int64
和 Float64
),因为它需要大量内存。我想避免 @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
我在 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 个元素:Int64
、Float64
、Array{Array{Array{Int64,1},1},1}
、Array{Array{Array{Int64,1},1},1}
和 Array{Int64,1}
。
如何在不加载整个文件的情况下访问每个元素的前 2 个元素(Int64
和 Float64
),因为它需要大量内存。我想避免 @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