Tan*_*ene -2 performance r distribution matrix
我的代码块正在做的是用T的F填充4X100000矩阵.让我们命名矩阵X.然后是Xij~Bernoulli(P)和P~normal(0.5,0.15),其中max(P)= 1并且min(P)= 0.
统计数据非常低效.如果有上述过程坚持的分布请帮助我.
计算速度非常慢,因为我必须用1个条目填充整个矩阵1条目,每次都是随机的.有没有办法减少显着的时间?这是非常低效的.
统计效率问题在这里
x = rnorm(100000,mean = 0.5,sd = 0.15)
x[x > 1] = 1
x[x < 0] = 0
probability = function(x){
x.sam = sample(x,1)
p = c(x.sam,1-x.sam)
return(p)
}
aggro2 = function(x){
aggro2 = sample(c(T,F),1, prob = probability(x))
return(aggro2)
}
Run Code Online (Sandbox Code Playgroud)
计算效率问题在这里
ptm = proc.time()
aggro =c()
n=100000
for (i in 1:(4*n)){
cat(round(i/(4*n)*100,2),"\n")
aggro = c(aggro, aggro2(x))
}
aggro.mat = matrix(aggro,4,n)
elapsed = proc.time()[3] - ptm[3]
cat(elapsed)
Run Code Online (Sandbox Code Playgroud)
这个怎么样?
system.time({
x <- rnorm(400000,mean = 0.5,sd = 0.15) ## pick normal variables
x2 <- pmin(1,pmax(0,x)) ## bound at 0 and 1
mids <- which(x2>0 & x2<1)
x2[mids] <- rbinom(length(mids),prob=x2[mids],size=1)
res <- matrix(x2,ncol=4)
})
Run Code Online (Sandbox Code Playgroud)
这似乎与您正在做的完全相同,但似乎(?)与您的描述相符.
经过时间:0.443秒
你正在做的一些事情会不必要地缓慢:
for
循环而不是矢量化for
循环过程中打印