是否可以像以下一样对代码进行矢量化?
length(x) <- 100;
x[1] <- 1;
y <- rnorm(100);
for(i in 2:100) {
x[i] <- 2 * y[i] * x[i-1];
}
Run Code Online (Sandbox Code Playgroud)
我很欣赏这是一个微不足道的例子,但它有助于说明这个想法.
我经常需要编写代码,其中向量中的第i个值取决于第(i-1)个值,如果可能的话,我想写这个而不需要for循环,因为分析建议使用这种类型的函数操作是我的代码中的主要瓶颈.
这个操作是否可以向量化,所以我不需要for()在计算中使用循环?
在示例中,您可以计算x [i]的公式并查看它是否可以进行矢量化.在这种情况下,我认为cumprod可能会起作用.
x <- c(1, cumprod(2*y)[1:99])
Run Code Online (Sandbox Code Playgroud)
对于某些情况,您也可以filter在卷积或递归模式下使用该命令.看到?filter
但是,如果无法计算出适合上述模具之一的第n个值的公式,您可以尝试使用类似的软件包inline或Rcpp在C/C++中循环编写.