我正在使用以下函数来估计一些数据的内核密度
KDens = function(x,h,N) {
fx = matrix(0,N,1)
Kx = AK(x,h,N)
for (i in 1:N) {
fx[i] = sum(Kx[i,], na.rm=T)/N
}
return(fx) }
我知道这不是关于加速循环的第一个问题。我在网站上进行了检查,发现有时使用某些apply
功能更快,但如果您设法正确设置循环,情况并非总是如此。
在上面的代码中,每个“不需要的东西”都被排除在循环之外,因为 - 如果我理解正确 - 建议加快计算速度。KDens
但是,我对上面的函数和density
R 默认实现的函数做了一个比较。好吧,density
需要 1 或 2 秒,而KDens
在我的机器上需要 ~30 秒。
trywiththis <- rnorm(4800)
x = trywiththis
N = length(trywiththis)
h = 1.059*sd(trywiththis , na.rm=T)*(N^(-0.2))
编辑:我提供的信息不完整
kerf = function(x){ return(dnorm(x)) }
ker = function(x,x0,h){
temp = kerf((x-x0)/h)/h
return(temp)
}
AK = function(x,h,N) {
K = array(0,c(N,N))
for (i in 1:N) {
for (j in 1:N) {
K[i,j] = ker(x[i],x[j],h)
}}
return(K) }
假设我想加快 KDens 功能,我该怎么做?