R - 为增量循环加速 R 版本的 MATLAB
R - speed up R version of MATLAB for incremental loop
有什么方法可以加快以下 MATLAB for 循环的 R 翻译吗?
虽然这个例子很小,但真实的数据集可能有SSC、SSL、dt的50万行。加上这种类似的操作将不得不应用于大约 20 个数据集。
SSC <- abs(rnorm(1000))
SSL <- abs(rnorm(1000))
dt <- rep(15, 1000)
for (i in 2:length(SSC))
{
TSSL[[i-1]] <- (SSL[i] + SSL[i-1])/(2*60*dt[i-1])
}
# MATLAB code
# for i=2:length(SSC)
# TSSL(i-1)=(SSL(i) + SSL(i-1))/2*60*dt(i-1);
# end
谢谢。
什么是 TSSL?你应该初始化它。
此外,这里不需要循环,您应该使用向量运算:
N <- 1000
SSC <- abs(rnorm(N))
SSL <- abs(rnorm(N))
dt <- rep(15, N)
TSSL <- rep(NA,N)
TSSL[1:(N-1)] = (SSL[2:N]+SSL[1:(N-1)])/(2*60*dt[1:(N-1)])
我强烈建议阅读 R inferno 的第 3 章 "Failing to vectorize"。
有什么方法可以加快以下 MATLAB for 循环的 R 翻译吗?
虽然这个例子很小,但真实的数据集可能有SSC、SSL、dt的50万行。加上这种类似的操作将不得不应用于大约 20 个数据集。
SSC <- abs(rnorm(1000))
SSL <- abs(rnorm(1000))
dt <- rep(15, 1000)
for (i in 2:length(SSC))
{
TSSL[[i-1]] <- (SSL[i] + SSL[i-1])/(2*60*dt[i-1])
}
# MATLAB code
# for i=2:length(SSC)
# TSSL(i-1)=(SSL(i) + SSL(i-1))/2*60*dt(i-1);
# end
谢谢。
什么是 TSSL?你应该初始化它。
此外,这里不需要循环,您应该使用向量运算:
N <- 1000
SSC <- abs(rnorm(N))
SSL <- abs(rnorm(N))
dt <- rep(15, N)
TSSL <- rep(NA,N)
TSSL[1:(N-1)] = (SSL[2:N]+SSL[1:(N-1)])/(2*60*dt[1:(N-1)])
我强烈建议阅读 R inferno 的第 3 章 "Failing to vectorize"。