如何将字符串“ Array {Float64,1} [1,2,3]”转换为Julia中的实际数组?

时间:2019-07-08 22:59:29

标签: type-conversion julia

我基本上想获取一个字符串,例如“ Array {Float64,1} [1,2,3]”,然后将其转换为实际的数组:[1,2,3]

我已经尝试过convert函数,但是julia不喜欢将事物转换为数组。

convert(Array,x)

julia拒绝了这一说法,称它无法将字符串转换为数组。

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 个答案:

答案 0 :(得分:3)

您要尝试的是解析字符串。您可以使用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}

要引用文档(see here)

  

可以使用语法T [A,B,C,...]构造具有特定元素类型的数组。这将构造一个元素类型为T的一维数组,并初始化为包含元素A,B,C等。

因此Array{Float64,1}[[1, 2], [3, 4], [5, 6]]有效,而Array{Float64,1}[1, 2, 3]无效。