我想通过以下调用在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是一个数组的事实。 谢谢!
答案 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中的sin
或cos
,即默认情况下它们接受标量,并且您应将广播与.
一起使用将它们应用于向量。这在Julia手册的https://docs.julialang.org/en/latest/manual/functions/#man-vectorized-1中进行了说明。