#arrays #julia
Вопрос:
Я хочу переместить массив с моего ноутбука (Julia 1.3.1) на мой настольный ПК (Julia 1.6.2).
Я создаю массив в Julia 1.3.1 следующим образом.
using LinearAlgebra
H = ... #give a matrix H
eigen,vector = eigen(H)
Затем я хотел бы переместить «вектор» в Джулию 1.6.2.
Как вы это делаете?
Ответ №1:
Самый простой способ-это использовать DelimitedFiles
:
julia> v = [1.0,2.0,3.0]
julia> using DelimitedFiles
julia> writedlm("f.txt", v)
julia> readdlm("f.txt")
3×1 Matrix{Float64}:
1.0
2.0
3.0
julia> vec(readdlm("f.txt"))
3-element Vector{Float64}:
1.0
2.0
3.0
Обратите внимание, что это DelmitedFiles
работает с матрицами, поэтому в последнем примере показано, что делать, если вы предпочитаете хранить вектор.
Редактировать после комментария Богумила
Когда у вас есть Matrix
Complex
число, вам необходимо указать тип вывода для readdlm
:
julia> v = Complex.(rand(2,3), rand(2,3))
2×3 Matrix{ComplexF64}:
0.282157 0.540556im 0.757765 0.103518im 0.979935 0.212347im
0.557499 0.934859im 0.604032 0.338489im 0.431962 0.945946im
julia> writedlm("f.txt", v)
julia> readdlm("f.txt",'t',Complex{Float64})
2×3 Matrix{ComplexF64}:
0.282157 0.540556im 0.757765 0.103518im 0.979935 0.212347im
0.557499 0.934859im 0.604032 0.338489im 0.431962 0.945946im
julia> readdlm("f.txt",'t',Complex{Float64}) == v
true
Другой способ — использовать двоичный формат. Для долгосрочной промежуточной сериализации версий BSON
(двоичный json) может быть хорошим вариантом:
julia> using BSON
julia> BSON.bson("v.bson", v = v)
julia> v2 = BSON.load("v.bson")[:v]
2×3 Matrix{ComplexF64}:
0.282157 0.540556im 0.757765 0.103518im 0.979935 0.212347im
0.557499 0.934859im 0.604032 0.338489im 0.431962 0.945946im
Комментарии:
1.
eigen
создает матрицу в качестве второго возвращаемого значения. Также обычно это матрица комплексных чисел.readdlm
не справится с этим правильно. Я думаю, что лучше рекомендовать двоичный формат. Между Юлией 1.3 и 1.6 дажеserialize
иdeserialize
должно работать нормально.2. Спасибо вам обоим! Это было очень полезно.