在Julia中将包含输入参数的数组传递给函数

3

我如何将一个包含所需维度的数组传递给像onesrand这样的Julia函数?

例如,我想执行以下操作:

dims = [3 4]
rand(dims)

然后收到类似以下内容的东西
3×4 Array{Float64,2}:
 0.300811  0.140124  0.756915   0.268328 
 0.732461  0.900773  0.251334   0.0338452
 0.54227   0.439385  0.0812104  0.612996 

作为输出结果。

执行第一个代码块返回一个随机选取的数字,而数组 dimen = [3 4],然而 rand(dims = dimen) 返回一个错误 ERROR: function rand does not accept keyword arguments

有没有办法实现我所希望的?

2个回答

4
你需要的是"splat"操作符...,在文档中有描述:

与此相反,将可迭代集合中包含的值作为单独的参数传递给函数调用通常很方便,“splat”操作符...也可以在函数调用中使用。

在你的情况下:

julia> dims = [3 4];
julia> rand(dims...)

3×4 Array{Float64,2}:
 0.664496  0.190208  0.167208  0.172296
 0.632465  0.374373  0.417636  0.354948
 0.743741  0.740435  0.602339  0.401814

1
太好了!我也在尝试使用坐标数组来索引一个数组,而展开运算符对此也起作用。谢谢! - userManyNumbers

3
使用 展开运算符:
julia> xs = [3 4]
1×2 Array{Int64,2}:
 3  4

julia> rand(xs...)
3×4 Array{Float64,2}:
 0.569082   0.953     0.44541   0.12763 
 0.0529293  0.470243  0.770411  0.992597
 0.15326    0.248442  0.805518  0.246996

展开运算符会将数组插入到函数调用的参数列表中。

1
正是我想要的,谢谢。你和PaSTE写的答案都很有帮助,当网站允许我选择时,我接受的答案基本上是随意的。 - userManyNumbers

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接