将数组转换为列表-朱莉娅

时间:2018-08-03 22:20:46

标签: julia

我想通过以下调用在Julia的Rmath包中使用dbeta函数:

dbeta(x, 1, 25)

x是一个100 X 1的数组,当我尝试将x与dbeta函数一起使用时,出现以下错误:

ERROR: MethodError: no method matching dbeta(::Array{Float64,2}, ::Int64, ::Int64)

在Julia中是否可以将数字数组转换为数字列表?我基本上是想解决x是一个数组的事实。 谢谢!

1 个答案:

答案 0 :(得分:3)

Rmath版本0.4.0对dbeta具有以下方法:

julia> methods(dbeta)
# 2 methods for generic function "dbeta":
dbeta(x::Number, p1::Number, p2::Number) in Rmath at Rmath\src\Rmath.jl:192
dbeta(x::Number, p1::Number, p2::Number, give_log::Bool) in Rmath at Rmath\src\Rmath.jl:209

哪个向您显示dbeta期望标量作为其firs参数。实际上,您在运行dbeta(x, 1, 25)时会得到以下提示:

julia> dbeta(x, 1, 25)
ERROR: MethodError: no method matching dbeta(::Array{Float64,2}, ::Int64, ::Int64)
Closest candidates are:
  dbeta(::Number, ::Number, ::Number) at \Rmath\src\Rmath.jl:192
  dbeta(::Number, ::Number, ::Number, ::Bool) at v0.6\Rmath\src\Rmath.jl:209

它指导您正确的方法签名。

那么如何解决您的问题-这非常简单。像这样通过.使用广播:

dbeta.(x, 1, 25)

,所有工作均按预期进行。通常,您可以期望此模式应在Julia的几乎所有函数中使用,例如base中的sincos,即默认情况下它们接受标量,并且您应将广播与.一起使用将它们应用于向量。这在Julia手册的https://docs.julialang.org/en/latest/manual/functions/#man-vectorized-1中进行了说明。