Я пытаюсь сохранить большую переменную в Julia, полученную в результате длинных вычислений, в виде файла, поэтому я могу загрузить переменную позже, не пересчитывая ее. Когда я загружаю переменную, я получаю исключение. Я храню файл, используя библиотеку JLD для Джулии. Я вычисляю переменную, используя библиотеку Eirene, которая выполняет анализ топологических данных. Полученный файл имеет размер 173 МБ.
Я посмотрел это и не смог найти ничего об этом сообщении об ошибке онлайн. Сначала я волновался, что файл поврежден или что-то из-за недостатка места, но это не так.
Это код ошибки:
using Eirene
using JLD
C = load("/path_to_file/file.jld")["filtration"]
А вот код, куда я сохраняю файл:
using Eirene
using JLD
C = eirene("/path_to_distance_matrix/dmat",maxdim=3)
save("/path_to_file/file.jld", "filtration", C)
eirene
в основном строит серию треугольных структур на основе расстояний между точками в матрице расстояний, которую я даю. В частности, матрица расстояний очень плотная, что приводит к длинному вычислению построения треугольника.
Вы можете получить доступ к матрице расстояний в этом списке , если хотите воспроизвести эту проблему. Расчет занимает у меня 30 минут на моем ноутбуке.
Я получаю следующее сообщение об ошибке (файл get_class_reps
содержит первый фрагмент кода, приведенный выше).
ERROR: LoadError: unrecognized HDF5 datatype class 4
Stacktrace:
[1] jldatatype(::JLD.JldFile, ::HDF5.HDF5Datatype) at /home/curran/.julia/packages/JLD/1BoSz/src/jld_types.jl:738
[2] read(::JLD.JldDataset) at /home/curran/.julia/packages/JLD/1BoSz/src/JLD.jl:370
[3] read_ref(::JLD.JldFile, ::HDF5.HDF5ReferenceObj) at /home/curran/.julia/packages/JLD/1BoSz/src/JLD.jl:502
[4] read_refs(::JLD.JldDataset, ::Type{Any}, ::Int64, ::Int64, ::Tuple{Int64}) at /home/curran/.julia/packages/JLD/1BoSz/src/JLD.jl:475
[5] read_array(::JLD.JldDataset, ::HDF5.HDF5Datatype, ::Int64, ::Int64, ::Tuple{Int64}) at /home/curran/.julia/packages/JLD/1BoSz/src/JLD.jl:409
[6] read_array(::JLD.JldDataset, ::HDF5.HDF5Datatype, ::Int64, ::Int64) at /home/curran/.julia/packages/JLD/1BoSz/src/JLD.jl:408
[7] read(::JLD.JldDataset) at /home/curran/.julia/packages/JLD/1BoSz/src/JLD.jl:372
[8] read_ref(::JLD.JldFile, ::HDF5.HDF5ReferenceObj) at /home/curran/.julia/packages/JLD/1BoSz/src/JLD.jl:502
[9] jlconvert(::Type{JLD.AssociativeWrapper{String,Any,Dict{String,Any}}}, ::JLD.JldFile, ::Ptr{UInt8}) at /home/curran/.julia/packages/JLD/1BoSz/src/jld_types.jl:434
[10] read_scalar(::JLD.JldDataset, ::HDF5.HDF5Datatype, ::Type) at /home/curran/.julia/packages/JLD/1BoSz/src/JLD.jl:398
[11] read(::JLD.JldDataset) at /home/curran/.julia/packages/JLD/1BoSz/src/JLD.jl:370
[12] read_ref(::JLD.JldFile, ::HDF5.HDF5ReferenceObj) at /home/curran/.julia/packages/JLD/1BoSz/src/JLD.jl:502
[13] read_refs(::JLD.JldDataset, ::Type{Any}, ::Int64, ::Int64, ::Tuple{Int64}) at /home/curran/.julia/packages/JLD/1BoSz/src/JLD.jl:475
[14] read_array(::JLD.JldDataset, ::HDF5.HDF5Datatype, ::Int64, ::Int64, ::Tuple{Int64}) at /home/curran/.julia/packages/JLD/1BoSz/src/JLD.jl:409
[15] read_array(::JLD.JldDataset, ::HDF5.HDF5Datatype, ::Int64, ::Int64) at /home/curran/.julia/packages/JLD/1BoSz/src/JLD.jl:408
[16] read(::JLD.JldDataset) at /home/curran/.julia/packages/JLD/1BoSz/src/JLD.jl:372
[17] read_ref(::JLD.JldFile, ::HDF5.HDF5ReferenceObj) at /home/curran/.julia/packages/JLD/1BoSz/src/JLD.jl:502
[18] jlconvert(::Type{JLD.AssociativeWrapper{String,Any,Dict{String,Any}}}, ::JLD.JldFile, ::Ptr{UInt8}) at /home/curran/.julia/packages/JLD/1BoSz/src/jld_types.jl:434
[19] read_scalar(::JLD.JldDataset, ::HDF5.HDF5Datatype, ::Type) at /home/curran/.julia/packages/JLD/1BoSz/src/JLD.jl:398
[20] read(::JLD.JldDataset) at /home/curran/.julia/packages/JLD/1BoSz/src/JLD.jl:370
[21] read(::JLD.JldFile, ::String) at /home/curran/.julia/packages/JLD/1BoSz/src/JLD.jl:346
[22] #39 at ./none:0 [inlined]
[23] iterate at ./generator.jl:47 [inlined]
[24] collect(::Base.Generator{Array{String,1},getfield(JLD, Symbol("##39#41")){JLD.JldFile}}) at ./array.jl:606
[25] (::getfield(JLD, Symbol("##38#40")))(::JLD.JldFile) at /home/curran/.julia/packages/JLD/1BoSz/src/JLD.jl:1234
[26] #jldopen#14(::Base.Iterators.Pairs{Union{},Union{},Tuple{},NamedTuple{(),Tuple{}}}, ::Function, ::getfield(JLD, Symbol("##38#40")), ::String, ::Vararg{String,N} where N) at /home/curran/.julia/packages/JLD/1BoSz/src/JLD.jl:246
[27] load at /home/curran/.julia/packages/JLD/1BoSz/src/JLD.jl:244 [inlined]
[28] #load#13(::Base.Iterators.Pairs{Union{},Union{},Tuple{},NamedTuple{(),Tuple{}}}, ::Function, ::String) at /home/curran/.julia/packages/FileIO/e8FNK/src/loadsave.jl:118
[29] load at /home/curran/.julia/packages/FileIO/e8FNK/src/loadsave.jl:118 [inlined]
[30] main() at /home/curran/dev/honours/q6/get_class_reps.jl:49
[31] top-level scope at none:0
in expression starting at /home/curran/dev/honours/q6/get_class_reps.jl:57