Выборочная загрузка элементов из файла jld в Julia - PullRequest
0 голосов
/ 19 февраля 2019

Я сохранил объект с именем 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", потому что это слишком тяжело.

1 Ответ

0 голосов
/ 19 февраля 2019

Боюсь, то, что вы ищете, не совсем возможно.Существует гиперслабирование , а также частично поддерживается JLD (простой пример здесь ).Это позволит вам читать каждый элемент по одному.Тем не менее, он не позволяет загружать только первые два компонента каждого элемента.

Тем не менее, перебор каждого элемента по одному может все еще быть полезным, так как вы можете избежать загрузки полного набора данных в память (следовательно, вы можете обработать набор данных, который слишком велик для хранения в памяти).Это, вероятно, не быстрее, чем загрузка полного набора данных (если вы можете).

Создание некоторых (упрощенных) поддельных данных и сохранение их на диск

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
...