【问题标题】:Variable sized keyword arguments in JuliaJulia 中可变大小的关键字参数
【发布时间】:2016-12-19 19:27:01
【问题描述】:

我正在编写一个凸求解器,为了具体起见,假设它正在求解普通的最小二乘:找到最小化 ||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

会成功的。

【问题讨论】:

    标签: arguments metaprogramming julia keyword-argument type-stability


    【解决方案1】:

    似乎 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
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-10-11
      • 2018-01-29
      • 1970-01-01
      • 1970-01-01
      • 2015-04-08
      • 2017-11-26
      相关资源
      最近更新 更多