我收到警告,我不明白。
我首先运行以下代码:
type PDF{T <: Real}
::Vector{Float64} # K
μs::Matrix{T} # D x K
Σs::Vector{Matrix{T}} # K{D x D}
end
type Q{T <: Real}
w::Union{Float64, Vector{Float64}}
μpair::Union{Vector{T}, Matrix{T}}
Σpair::Union{Matrix{T}, Tuple{Matrix{T}, Matrix{T}} } # K{D x D}
end
type Smod{T <: Real}
H::Matrix{T} # D x D
Σs::Vector{Matrix{T}} # K{D x D}
qs::Vector{Q{T}}
end
type Scale{T <: Real}
μ::Vector{T} # D
Σ::Matrix{T} # D x D
end
type Parameters{T <: Real}
scale::Scale{T}
w::Vector{Float64}
maxNumCompsBeforeCompression::Integer
numComponentsAbsorbed::Integer
end
type KDE{T}
pdf::PDF{T}
smod::Smod{T}
params::Parameters{T}
end
在此之后,我在IJulia中运行以下代码段
function initializeKDE{T <: Real}(x::Vector{T})
d = size(x,1)
T = typeof(x)
= ones(Float64, 1)
μs = Array(T, d,1)
μs[:,1] = x
Σs = Array(Matrix{T}, 0)
pdf = PDF(, μs, Σs)
H = zeros(T, d,d)
qs = Array(Q{T}, 0)
smod = Smod(H, Σs, qs)
scale = Scale(x, H)
w = [0.0, 1.0]
maxNumCompsBeforeCompression = min(10, (0.5d^2 + d))
numComponentsAbsorbed = 0
params = Params(scale, w, maxNumCompsBeforeCompression, numComponentsAbsorbed)
kde = KDE(pdf, smod, params)
return kde::KDE
end
我收到以下警告:
WARNING: local variable T conflicts with a static parameter in initializeKDE at In[4]:3.
其中In[4]:3
对应第二个片段的第3行。
有人能用人类英语解释这个警告说的是什么吗?
答案 0 :(得分:1)
这就是说你试图以两种不同的方式使用T
:一次作为“静态参数”,一次作为局部变量。
首先,您使用T
作为参数化参数的参数initializeKDE
:
function initializeKDE{T <: Real}(x::Vector{T})
但是你试图在第三行重新定义一个新的T
:
T = typeof(x)
你想在这做什么?如果您尝试将T
定义为向量x
包含的元素的类型,那么您应该删除此行并且所有内容都应该正常工作 - T
将自动执行传递给eltype
函数的向量的元素类型(initializeKDE
)。