【问题标题】:For Julia saving output to txt/CSV file?对于 Julia 将输出保存到 txt/CSV 文件?
【发布时间】:2021-07-14 06:32:16
【问题描述】:

我在 Win10 上使用 Julia 1.4.2 处理输出保存,我尝试了几种引用 docs 的方法。但没有什么对我有用。 我要保存的输出如下所示

julia> sim_result
GpABC.SimulatedABCRejectionOutput(3, 1465, 20000, 1.0, [4.5398045285832636 16.341298256602684 0.8528241692701137; 2.2014098882111117 11.88704704892733 1.8060482719350048; … ; 3.4569125171576727 14.206295598447817 1.2527525901911478; 1.1086538611233734 16.95205292134931 0.7814523160265465], [0.8718784407104312, 0.9897439825224637, 0.7361435718656393, 0.7863129137954922, 0.8097276891293583, 0.7167559341428585, 0.6600858843737456, 0.7420732257406872, 0.8085779131629843, 0.7603566788770011  …  0.9172504543539195, 0.5578993725435081, 0.8377191750525664, 0.7847440234430122, 0.6465487321194205, 0.716785821691151, 0.2596989086130145, 0.7210284576525666, 0.9855259563757373, 0.5775313512469311], [0.0006825938566552899, 0.0006825938566552899, 0.0006825938566552899, 0.0006825938566552899, 0.0006825938566552899, 0.0006825938566552899, 0.0006825938566552899, 0.0006825938566552899, 0.0006825938566552899, 0.0006825938566552899  …  0.0006825938566552899, 0.0006825938566552899, 0.0006825938566552899, 0.0006825938566552899, 0.0006825938566552899, 0.0006825938566552899, 0.0006825938566552899, 0.0006825938566552899, 0.0006825938566552899, 0.0006825938566552899])

它的结构是 GpABC.SimulatedABCRejectionOutput(::Int64, ::Int64, ::Int64, ::Float64, ::AbstractArray{Float64,2}, ::AbstractArray{Float64,1}, ::StatsBase.Weights) 我想将::AbstractArray{Float64,2} 保存到 TXT 或 CSV 文件中。

【问题讨论】:

  • 解决了!通过“您需要通过执行 fieldnames(typeof(sim_result)) 来了解数组是如何存储在您的 sim_result 对象中的。假设该字段称为数据,然后您可以使用 DelimitedFiles; writedlm("output.txt ", sim_result.data) 来写一个简单的分隔文本文件,或者使用 CSV;CSV.write("output.csv", (data = sim_result.data, )) (注意创建 NamedTuple 的逗号)来写一个 csv 。”来自this link
  • 也可以试试dump(sim_results) 看看发生了什么。

标签: csv save output julia txt


【解决方案1】:

很高兴提供这个作为实际答案 - 如果您在多个地方发帖,交叉引用总是好的,我在这里错过了这个。

第 1 步:找出如何访问该数组 - 它将是 sim_result 对象的一个​​字段,您可以使用 fieldnames 找出如何调用此类型的字段。您需要使用typeof(sim_result),因为fieldnames 对类型进行操作。

julia> fieldnames(typeof(sim_result))
(:n_params, :n_accepted, :n_tries, :threshold, :population, :distances, :weights)

这告诉您可以以sim_result.population 的身份访问该数组。

第 2 步:如何将数组写入 txt 或 csv?最简单的解决方案是使用DelimitedFiles标准库,可以将分隔文件写入文本:

julia> using DelimitedFiles

julia> writedlm("output.txt", sim_result.population)

或者,如果你想编写一个 csv 文件,你应该使用 CSV 包,它需要安装在你当前的环境中。然后你可以这样做:

julia> using CSV

julia> CSV.write(output.csv", (data = sim_result.population, ))

请注意,(data = sim_result.population, ) 中的逗号创建了一个 NamedTuple,这是 Julia 中最简单的表兼容对象(CSV 库需要一个表作为 CSV.write() 的参数)

【讨论】:

    猜你喜欢
    • 2015-06-10
    • 1970-01-01
    • 1970-01-01
    • 2015-08-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-03-29
    相关资源
    最近更新 更多