Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/loops/2.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_Loops_Vectorization - Fatal编程技术网

R中的矢量化循环

R中的矢量化循环,r,loops,vectorization,R,Loops,Vectorization,我有一个名为p_array的数组,有100000个数据点,需要计算长度为100的子间隔的一阶自相关,即从1:100和2:101等。我写了一个循环,它工作得很好,但速度非常慢 Tf <- 100000 acf_Array <- rep(0, length.out = Tf-100) for (t in 1:(Tf-100)){ acf_Array[t] <- acf(P_Array[t:(t+100)])$acf[2] } Tf要回答有关对for循环进行矢量化的具体

我有一个名为
p_array
的数组,有100000个数据点,需要计算长度为100的子间隔的一阶自相关,即从
1:100
2:101
等。我写了一个循环,它工作得很好,但速度非常慢

Tf <- 100000
acf_Array <- rep(0, length.out = Tf-100)  
for (t in 1:(Tf-100)){
  acf_Array[t] <- acf(P_Array[t:(t+100)])$acf[2]
  }

Tf要回答有关对for循环进行矢量化的具体问题,以下是我的答案:

acf_Array <- sapply(1:Tf-100, function(x) acf(P_Array[x:x+100])$acf[2])

acf\u数组代码中的限速部分是对acf的大量调用。我不确定这是否可以避免,所以我只能建议编写一个更快的
acf
函数(它只计算第二个系数,可能避免一些不必要的测试),或者通过Rcpp将整个循环转换为编译代码。这不是一个答案,而是一个建议。你应该在主要问题下发表评论。这不是矢量化的例子<代码>*应用
函数只是隐藏循环。通常推荐使用它们,因为它们更方便,可读性更强,但它们并不比编写良好的
for
循环快。
  for (t in 1:(Tf-100)){
  acf_Array[t] <- cor(P_Array[t:(t+98)], P_Array[(t+1):(t+99)])
  }
acf_Array <- sapply(1:Tf-100, function(x) acf(P_Array[x:x+100])$acf[2])