可以使用以下方式创建多变量分布:
using Distributions
rand(MvNormal([1, 1.], [1 .5; .5 1]), 2)
但它不适用于整数:
using Distributions
rand(MvNormal([1, 1], [1 .5; .5 1]), 2)
为什么吗
P.S。第二个例子会抛出一个错误:
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
答案 0 :(得分:7)
在朱莉娅,数字switch(indexPath.row){
case 5:
case 6:
case 7:
case 8:
case 9:
case 10:
case 16:
cell.accessoryType=UITableViewCellAccessoryDisclosureIndicator;
break;
default:
cell.accessoryType = UITableViewCellAccessoryNone;
break;
}
return cell;
和1
是完全不同的东西。第一种是1.0
类型,第二种是Integer
类型。所以FloatingPoint
是一个整数数组,而[1, 1]
是一个浮点数数组。
该错误消息告诉您它为什么不能正常工作,但解析所有类型参数可能有点困难。
MethodError意味着它无法找到具有匹配参数类型的方法。它在致电[1.0, 1.0]
时失败了。但是,您没有编写转换调用,因此它必须在库中发生。但是消息继续说这可能是从对构造函数的调用中发生的。也就是说,它无法匹配convert(MvNormal{…}, ::Vector{Int}, ::Matrix{Float64}
形式的构造函数,因此它回退到一个内置方法,该方法尝试将参数转换为类型而不是构造它。这正是你写的!那种方法不存在。
然后,该消息会为您提供最接近的匹配方法:MvNormal{…}(::Vector{Int}, ::Matrix{Float64})
,它甚至会突出显示与MvNormal(::Vector{Float64}, ::Matrix{Float64)
不匹配的参数。
那么,为什么它不起作用?因为没有人编写过允许整数向量的构造函数。但为什么不呢?在Julia中,Integers和FloatingPoint数字的表现非常不同,因此如果另一个并不特别有意义,那么它只支持一个。与其他一些语言不同,您需要了解!Matched
和1
之间的区别。