在Julia中解析二维数组
在Julia中,我可以使用在Julia中解析二维数组,julia,Julia,在Julia中,我可以使用 [1 2 3 4 ; 5 6 7 8] 2×4 Array{Int64,2}: 1 2 3 4 5 6 7 8 问题是,我需要解析作为脚本参数提供的2D数组,即字符串 比如说 $ julia script.jl "[1 2 3 4 ; 5 6 7 8]" 在脚本中,类似于: c = parse.(ARGS[1]) c应该是一个2×4的数组 我对输入字符串的格式很灵活 用例是,我想从Java中调用Julia+JuMP实现的优化问题 检查该函数,它将允许
[1 2 3 4 ; 5 6 7 8]
2×4 Array{Int64,2}:
1 2 3 4
5 6 7 8
问题是,我需要解析作为脚本参数提供的2D数组,即字符串
比如说
$ julia script.jl "[1 2 3 4 ; 5 6 7 8]"
在脚本中,类似于:
c = parse.(ARGS[1])
c应该是一个2×4的数组
我对输入字符串的格式很灵活
用例是,我想从Java中调用Julia+JuMP实现的优化问题 检查该函数,它将允许您将从ARGS
接收的文本作为数组进行解析:
using DelimitedFiles
a = readdlm(IOBuffer(ARGS[1]),',',';')
display(a)
运行:
$ 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
$ 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"))
可以强制脚本中的数组元素类型:
a = readdlm(IOBuffer(ARGS[1]),',',Int,';')
您甚至可以通过再传递两个参数来强制执行矩阵维度:
using DelimitedFiles
n = parse(Int,ARGS[1])
m = parse(Int,ARGS[2])
a = readdlm(IOBuffer(ARGS[3]),',',Int,';',dims=(n,m))
运行:
$ 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
$ 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"))
你的意思是
c=eval(parse(ARGS[1]))
。。。但不确定这是做这样一件事的最佳方法。另外,看看哪一种方法解决了类似的问题(参考使用eval
)也许有必要告诉我们您正试图通过这件事实现什么,只是为了确保这不是一个类似的问题。例如,你的问题可以很容易地解决,如果你想留在REPL中,可以这样做julia-E“c=[1 2 3 4;2 3 4 5];include(\“script.jl\”)
(或者-ie
,而不是-E
)(不是说这样更安全,而是…)