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])