【问题标题】:Save large numeric output to file natively in Julia 1.0.0在 Julia 1.0.0 中将大数字输出保存到本地文件
【发布时间】:2019-02-05 13:57:46
【问题描述】:

我正在尝试在 hpc-cluster 中运行一个程序。不幸的是,我无法在集群上安装外部软件包(例如 JLD2)。这是一个暂时的问题,应该得到解决。

我不想一直等待,我想知道是否有任何方法可以在 Julia 中保存大量输出(2-3 GB)而无需外部依赖。大部分输出是数字矩阵。我之前使用的是 JLD2,它以 HDF5 格式存储数据。

额外问题:是否有使用 shell 命令解决此问题的方法,例如使用管道获取输出并使用 awk//grep 保存数据? (类似于julia -p 12 main.jl | echo "file")。

【问题讨论】:

    标签: file-io julia hpc


    【解决方案1】:

    你可以试试Serialization标准库。

    要处理多个变量,您可以按顺序存储它们:

    x = rand(10)
    y = "foo"
    
    using Serialization
    # write to file
    open("data.out","w") do f
        serialize(f, x)
        serialize(f, y)
    end
    
    # load from file
    open("data.out") do f
        global x2, y2
        x2 = deserialize(f)
        y2 = deserialize(f)
    end
    

    或者您可以将它们放在Dict 中,然后将其存储。

    【讨论】:

    • 这很棒,它适用于我的目的!但我不明白f 是什么意思?那只是一个临时对象吗?我可以使用任何其他字符吗?
    • 这是一个文件句柄:有关 do 块的更多信息,请参阅 docs.julialang.org/en/v1/manual/functions/…
    【解决方案2】:

    您可以将write 作为二进制文件。类似于

    julia> x = rand(2,2);
    
    julia> write("test.out", x)
    
    julia> y = reshape(reinterpret(Float64, read("test.out")), 2,2)
    
    julia> x == y
    true
    

    如果只是缺少 HDF5,您可以使用例如 NPZ.jl

    【讨论】:

    • 是的,这很好,但它会因为大量的输出变量而变得混乱。我喜欢 JLD 格式,您可以在其中将所有工作区变量保存为输出,并以不同的语言(如 python 或 matlab)读取它。我现在不知何故无法在我的集群帐户中安装软件包,所以 NPZ 无法工作。也许我会按照您的建议手动编写每个变量。我的源代码不是我写的,所以操作变量很麻烦。不过谢谢!
    • 您有文件访问权限吗?只需在本地下载包(和依赖项)并上传到.julia 文件夹即可。
    • 这是个好主意!这样我就不必弄乱变量了。我会试试这个。
    猜你喜欢
    • 2021-07-14
    • 1970-01-01
    • 1970-01-01
    • 2019-05-04
    • 2021-08-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多