在 Julia 中解析二维数组

Kal*_*lle 2 julia

在 Julia 中,我可以创建二维数组

[1 2 3 4 ; 5 6 7 8]
2×4 Array{Int64,2}:
1  2  3  4
5  6  7  8
Run Code Online (Sandbox Code Playgroud)

问题是,我需要解析作为脚本参数提供的二维数组 - 即作为字符串。

例如

$ julia script.jl "[1 2 3 4 ; 5 6 7 8]"
Run Code Online (Sandbox Code Playgroud)

并在脚本中类似:

c = parse.(ARGS[1])
Run Code Online (Sandbox Code Playgroud)

并且 c 应该是一个 2×4 的数组。

我对输入字符串的格式很灵活。

用例是,我想从 Java 内部调用在 Julia + JuMP 中实现的优化问题。

Jer*_*nin 5

查看该readdlm函数,该函数将允许您解析ARGS作为数组接收的文本:

using DelimitedFiles
a = readdlm(IOBuffer(ARGS[1]),',',';')
display(a)
Run Code Online (Sandbox Code Playgroud)

跑步:

$ julia argscript.jl "1,2,3,4;5,6,7,8"
2×4 Array{Float64,2}:
 1.0  2.0  3.0  4.0
 5.0  6.0  7.0  8.0
Run Code Online (Sandbox Code Playgroud)

您可以在脚本中强制使用数组元素类型:

a = readdlm(IOBuffer(ARGS[1]),',',Int,';')
Run Code Online (Sandbox Code Playgroud)

您甚至可以通过传递另外两个参数来强制矩阵维度:

using DelimitedFiles
n = parse(Int,ARGS[1])
m = parse(Int,ARGS[2])
a = readdlm(IOBuffer(ARGS[3]),',',Int,';',dims=(n,m))
Run Code Online (Sandbox Code Playgroud)

跑步:

$ julia argscript.jl 2 3 "3,2,1;2,6,8"
2×3 Array{Int64,2}:
 3  2  1
 2  6  8

$ julia argscript.jl 2 4 "3,2,1;2,6,8"
ERROR: LoadError: at row 2, column 1 : ErrorException("missing value at row 1 column 4"))
Run Code Online (Sandbox Code Playgroud)