Julia 中可变大小的关键字参数
Variable sized keyword arguments in Julia
我正在写一个凸求解器,为了具体起见,假设它正在求解普通最小二乘法:找到最小化 ||b-Ax||^2 的 x。所以我的函数调用看起来像
x = optim(A, b)
我希望能够在有用时使用热启动,以提供对解决方案的良好初步猜测。所以像
x = optim(A, b; w=some_starting_value)
我的问题是,如果我想使用默认值,some_starting_value
的长度必须等于 A
中的列数,这是由用户选择的。在 R 中可以做类似
的事情
x = optim(A, b; w=ncols(A))
Julia 中是否存在任何类似的功能?我目前的解决方案是做类似
的事情
x = optim(A, b; w=0)
然后检查 w != 0
并在 optim
函数中将其设置为正确大小的向量。但这似乎很老套,而且(我认为)扰乱了类型稳定性。
是否有一种简洁的方法来指定其大小取决于所需参数的关键字参数?
编辑
看起来像
function foo{T<:Real}(A::Array{T,2}; w=zeros(T,size(x,2)))
println("$x")
println("$y")
end
会成功的。
看来 Julia 中的默认参数可以是包含其他参数值的表达式:
julia> a(x, y=2*x) = println("$x, $y")
a (generic function with 2 methods)
julia> a(10)
10, 20
此外,默认参数表达式可以调用其他函数:
julia> b(x) = sqrt(x)
b (generic function with 1 method)
julia> a(x, y=b(x)) = println("$x, $y")
a (generic function with 2 methods)
julia> a(100)
100, 10.0
我正在写一个凸求解器,为了具体起见,假设它正在求解普通最小二乘法:找到最小化 ||b-Ax||^2 的 x。所以我的函数调用看起来像
x = optim(A, b)
我希望能够在有用时使用热启动,以提供对解决方案的良好初步猜测。所以像
x = optim(A, b; w=some_starting_value)
我的问题是,如果我想使用默认值,some_starting_value
的长度必须等于 A
中的列数,这是由用户选择的。在 R 中可以做类似
x = optim(A, b; w=ncols(A))
Julia 中是否存在任何类似的功能?我目前的解决方案是做类似
的事情x = optim(A, b; w=0)
然后检查 w != 0
并在 optim
函数中将其设置为正确大小的向量。但这似乎很老套,而且(我认为)扰乱了类型稳定性。
是否有一种简洁的方法来指定其大小取决于所需参数的关键字参数?
编辑 看起来像
function foo{T<:Real}(A::Array{T,2}; w=zeros(T,size(x,2)))
println("$x")
println("$y")
end
会成功的。
看来 Julia 中的默认参数可以是包含其他参数值的表达式:
julia> a(x, y=2*x) = println("$x, $y")
a (generic function with 2 methods)
julia> a(10)
10, 20
此外,默认参数表达式可以调用其他函数:
julia> b(x) = sqrt(x)
b (generic function with 1 method)
julia> a(x, y=b(x)) = println("$x, $y")
a (generic function with 2 methods)
julia> a(100)
100, 10.0