Как исправить `LoadError: нераспознанный тип данных HDF5 класса 4`, использующий JLD Джулии для хранения данных из пакета Eirene? - PullRequest
1 голос
/ 04 июня 2019

Я пытаюсь сохранить большую переменную в 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
...