【问题标题】:Turn an Expr into an array in julia在 julia 中将 Expr 转换为数组
【发布时间】:2021-07-20 12:34:27
【问题描述】:

我有一个Expr

:([4.01673077 7.62137432 8.74459436 10.14775067 12.57379884 14.39781963; 17.00925227 19.2273262])

我希望将其转换为 Vector{Float64},但在此直接调用 eval 似乎不起作用。

我该怎么做?

【问题讨论】:

    标签: julia metaprogramming


    【解决方案1】:

    您可以从Expr(更快、更安全)或仅从eval(更慢、不安全、更简单的代码)中提取数据。

    julia> a  = :([12.57379884 14.39781963; 17.00925227 19.2273262])
    :([12.57379884 14.39781963; 17.00925227 19.2273262])
    
    julia> [Float64.(vals) for vals in getfield.(a.args, :args)]
    2-element Vector{Vector{Float64}}:
     [12.57379884, 14.39781963]
     [17.00925227, 19.2273262]
    
    julia> eval(a)
    2×2 Matrix{Float64}:
     12.5738  14.3978
     17.0093  19.2273
    

    您的矩阵格式错误,因此只有第一个解决方案可以使用它。

    【讨论】:

    • 我还以为直接换';'的Expr上可能有一些操作到 ',' 就像在字符串中一样。但答案很棒。谢谢!普热梅斯瓦夫。
    • 您可以执行类似 `JSON3.read(replace(replace(string(a),' '=>','),";,"=>",")) 之类的操作,但这不太优雅。
    猜你喜欢
    • 2016-04-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-05-16
    • 2020-03-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多