Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/magento/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
R 替换在嵌套循环中的长度为零_R_For Loop_Nested Loops - Fatal编程技术网

R 替换在嵌套循环中的长度为零

R 替换在嵌套循环中的长度为零,r,for-loop,nested-loops,R,For Loop,Nested Loops,我对嵌套循环有问题,代码如下: T=2 dt=0.001 K=floor(T/dt) t= seq(0,T,dt) BM<- matrix(0,2000,1000) for (i in 1:1000){ for (k in 1:K-1){ BM[k+1,i]=BM[k,i]+sqrt(dt)*rnorm(1) } } 循环中有什么问题? 它的目标是模拟1000条布朗运动的样本路径。这就是问题所在: for (k in 1:K-1){ 你的优先权被取消了。这将有助于: for (k i

我对嵌套循环有问题,代码如下:

T=2
dt=0.001
K=floor(T/dt)
t= seq(0,T,dt)

BM<- matrix(0,2000,1000)
for (i in 1:1000){
for (k in 1:K-1){
BM[k+1,i]=BM[k,i]+sqrt(dt)*rnorm(1)
}
}
循环中有什么问题? 它的目标是模拟1000条布朗运动的样本路径。

这就是问题所在:

for (k in 1:K-1){
你的优先权被取消了。这将有助于:

for (k in 1:(K-1)){
等价地(对于
K>0
):

矢量化更好:

for (k in seq(K-1)) {
  BM[k+1,] <- BM[k,]+sqrt(dt)*rnorm(2000)
}
for(k在序列(k-1)中){
BM[k+1,]这就是问题所在:

for (k in 1:K-1){
您的优先级已关闭。这将起作用:

for (k in 1:(K-1)){
等价地(对于
K>0
):

矢量化更好:

for (k in seq(K-1)) {
  BM[k+1,] <- BM[k,]+sqrt(dt)*rnorm(2000)
}
for(k在序列(k-1)中){

BM[k+1,]这是一种完全矢量化的方法,它给出了相同的结果,并且比使用
进行
循环更快

B <-  mat.or.vec(K,1000)  # pre-allocate 
set.seed(1)
B[-1, ] <- matrix(rnorm((K-1)*100),K-1,1000) * sqrt(dt)
B <- apply(B, 2, cumsum)
对于
-循环,矢量化方法比两个嵌套的
快88倍左右

for.loop <- function(){  # this is your approach
  BM<- matrix(0,2000,1000)
  set.seed(1)
  for (i in 1:1000){
    for (k in 1:(K-1)){
      BM[k+1, i]=BM[k,i]+sqrt(dt)*rnorm(1)
    }
  }
  return(BM)
}


vectorized <- function(){  # this is my approach
  B <-  mat.or.vec(K,1000)  # pre-allocate
  set.seed(1)
  B[-1, ] <- matrix(rnorm((K-1)*100),K-1,1000) * sqrt(dt)
  B <- apply(B, 2, cumsum)
}


library("rbenchmark")
benchmark(vectorized(),
          for.loop(),
          replications=10,
          columns=c('test', 'elapsed', 'relative'),
          order = "relative")

这是一种完全矢量化的方法,它给出了相同的结果,并且比使用
进行
循环更快

B <-  mat.or.vec(K,1000)  # pre-allocate 
set.seed(1)
B[-1, ] <- matrix(rnorm((K-1)*100),K-1,1000) * sqrt(dt)
B <- apply(B, 2, cumsum)
对于
-循环,矢量化方法比两个嵌套的
快88倍左右

for.loop <- function(){  # this is your approach
  BM<- matrix(0,2000,1000)
  set.seed(1)
  for (i in 1:1000){
    for (k in 1:(K-1)){
      BM[k+1, i]=BM[k,i]+sqrt(dt)*rnorm(1)
    }
  }
  return(BM)
}


vectorized <- function(){  # this is my approach
  B <-  mat.or.vec(K,1000)  # pre-allocate
  set.seed(1)
  B[-1, ] <- matrix(rnorm((K-1)*100),K-1,1000) * sqrt(dt)
  B <- apply(B, 2, cumsum)
}


library("rbenchmark")
benchmark(vectorized(),
          for.loop(),
          replications=10,
          columns=c('test', 'elapsed', 'relative'),
          order = "relative")

在1:(K-1)。我想你可以在没有环路的情况下做这个模拟。谢谢大家,伙计们!你们帮了很多忙!@ USSR3187955,如果你认为你的问题已经被回答了,你可以只接受其中一个,但是当你有足够的投票权的时候,你可以选择多于一个的投票;你错过的A)在1:(K-1)我想你可以在没有环路的情况下做这个模拟。谢谢大家,各位!你们帮了很多忙!@ USSR3187955,如果你认为你的问题已经被回答了,你只能接受其中一个,但是当你有足够的声誉来支持你的投票时,你可以投票超过一个。chmarking在这里,
matrix(0,k,1000)
需要更少的击键hmm,从来没有听说过
mat.或.vec
因为每个人都在这里进行基准测试,
matrix(0,k,1000)
需要更少的击键