我正在写一个凸解算器,为了具体起见,假设它正在解决普通最小二乘:找到最小化|| 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
函数中的正确大小向量。但这似乎是hacky和(我假设)混乱的类型稳定。
是否有一种干净的方法来指定一个大小取决于所需参数的关键字参数?
修改 它看起来像
function foo{T<:Real}(A::Array{T,2}; w=zeros(T,size(x,2)))
println("$x")
println("$y")
end
会做到这一点。
答案 0 :(得分:4)
似乎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