Как преобразовать строку «Array {Float64,1} [1,2,3]» в фактический массив в Julia? - PullRequest
2 голосов
/ 09 июля 2019

Я в основном хочу взять строку, такую ​​как "Array {Float64,1} [1,2,3]" и превратить ее в фактический массив: [1,2,3]

Я уже пробовал использовать функцию преобразования, но Джулия не любит преобразовывать вещи в массивы.

convert(Array,x)

Юлия отвергает это, говоря, что не может преобразовать строку в массив.

ERROR: MethodError: Cannot `convert` an object of type String to an object of type Array
Closest candidates are:
  convert(::Type{Array}, ::DataStructures.CircularBuffer{T}) where T at /Users/benjaminkhoury/.julia/packages/DataStructures/5F6tJ/src/circular_buffer.jl:172
  convert(::Type{T<:Array}, ::AbstractArray) where T<:Array at array.jl:474
  convert(::Type{T<:AbstractArray}, ::T<:AbstractArray) where T<:AbstractArray at abstractarray.jl:14
  ...
Stacktrace:
 [1] top-level scope at none:0

1 Ответ

3 голосов
/ 09 июля 2019

То, что вы пытаетесь сделать, это разобрать строку.Вы можете использовать функцию Meta.parse для анализа строки в выражении.Затем вы можете использовать eval для вычисления выражения:

julia> ex = Meta.parse("[1., 2, 3]")
:([1.0, 2, 3])

julia> eval(ex)
3-element Array{Float64,1}:
 1.0
 2.0
 3.0

Обратите внимание, что я изменил вашу строку, поскольку выражение в вашей строке выдает ошибку:

julia> Array{Float64,1}[1, 2, 3]
ERROR: MethodError: Cannot `convert` an object of type Int64 to an object of type Array{Float64,1}

Чтобы процитироватьдокументы (см. здесь) ,

Массив с определенным типом элемента может быть создан с использованием синтаксиса T [A, B, C, ...].Это создаст 1-й массив с типом элемента T, инициализированный для содержания элементов A, B, C и т. Д.

Таким образом, Array{Float64,1}[[1, 2], [3, 4], [5, 6]] допустим, но Array{Float64,1}[1, 2, 3] - нет.

...