statistics - 为什么 Julia Distribution 包不能使用整数?

标签 statistics distribution julia

可以通过以下方式创建多元分布:

using Distributions
rand(MvNormal([1, 1.], [1 .5; .5 1]), 2)

但它不适用于整数:

using Distributions
rand(MvNormal([1, 1], [1 .5; .5 1]), 2)

为什么?

附言第二个例子会抛出一个错误:

LoadError: MethodError: `convert` has no method matching convert(::Type{Distributions.MvNormal{Cov<:PDMats.AbstractPDMat{T<:AbstractFloat},Mean<:Union{Array{Float64,1},Distributions.ZeroVector{Float64}}}}, ::Array{Int64,1}, ::Array{Float64,2})
This may have arisen from a call to the constructor Distributions.MvNormal{Cov<:PDMats.AbstractPDMat{T<:AbstractFloat},Mean<:Union{Array{Float64,1},Distributions.ZeroVector{Float64}}}(...),
since type constructors fall back to convert methods.
Closest candidates are:
  Distributions.MvNormal(!Matched::Array{Float64,1}, ::Array{Float64,2})
  call{T}(::Type{T}, ::Any)
  convert{T}(::Type{T}, !Matched::T)
  ...
while loading In[113], in expression starting on line 2

 in call at essentials.jl:57

最佳答案

在 Julia 中,数字 11.0是非常不同的东西。第一个是 Integer类型,第二个是 FloatingPoint类型。所以[1, 1]是一个整数数组,而 [1.0, 1.0]是一个 float 数组。

该错误消息确切地告诉您它不起作用的原因,但使用所有类型参数进行解析可能有点困难。

MethodError 意味着它找不到具有匹配参数类型的方法。调用 convert(MvNormal{…}, ::Vector{Int}, ::Matrix{Float64} 失败.但是,您没有编写转换调用,因此它一定是在库中发生的。但是消息接着说,这可能是由于调用构造函数而发生的。也就是说,它无法匹配 MvNormal{…}(::Vector{Int}, ::Matrix{Float64}) 形式的构造函数,所以它又回到了一个试图将参数转换为类型而不是构造它的内置方法。那正是你写的!该方法不存在。

消息然后给你最接近的匹配方法:MvNormal(::Vector{Float64}, ::Matrix{Float64) , 它甚至突出显示与 !Matched 不匹配的参数.

那么,为什么它不起作用?因为没有人编写过允许整数向量的构造函数。但为什么不呢?在 Julia 中,Integers 和 FloatingPoint 数字的行为非常不同,因此通常仅在另一个没有特别意义的情况下才支持其中一个。与其他一些语言不同,您需要了解 1 之间的区别。和 1.0 .

关于statistics - 为什么 Julia Distribution 包不能使用整数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35605163/

相关文章:

linux - bash 函数 $RANDOM 应该具有均匀分布吗?

machine-learning - 支持向量机模型应该有多具体?

python - 具有自定义概率分布的随机索引

在 C 中构造和返回 Julia 类型

java - 如何计算非 Double 类型的 Spark 统计信息

r - R 中的平滑样条曲线中的 'cross-validation with non-unique ' x'值似乎可疑'是什么意思?

matlab - 如何生成指向随机方向且具有各向同性方向分布的单位向量?

swift - 有没有办法打乱一个数组,使得没有两个连续的值是相同的?

julia - 整数矩阵的精确整数零空间?

julia - 如何在Julia中转置字符串数组?