Как экспортировать/импортировать массив в Julia?

#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. Спасибо вам обоим! Это было очень полезно.