【发布时间】:2013-01-09 06:59:41
【问题描述】:
我有几个关于循环的问题。我知道 R 在矢量化计算中工作得更快,我想更改下面的代码以利用这一点。在论坛上查看其他一些答案,sapply 函数似乎能够替换内部 for 循环,但我正在生成一个零向量,因此出现错误。道仍然是 1000,我认为这是造成问题的原因。
我主要关心的是速度,因为我需要围绕整个算法创建一个循环,并绘制不同的 V 和 n 大小以进行进一步分析。
感谢您的帮助
替代循环
tao = 1000
L = (tao - 1)
n = 10
V = 5
I = 10000
V_s = matrix(rnorm(I), I, 1)
V_b = matrix(rnorm(I), I, 1)
signal <- matrix(0, L, 1)
for( j in (n:L)){
sapply(((j-n+1):j),function (tao) signal[j] = signal[j] + abs(V_s[tao] - V_b[tao]))
signal[j] = (signal[j] / (n * V) )
}
原始循环
tao = 1000
L = (tao - 1)
n = 10
V = 5
I = 10000
V_s = matrix(rnorm(I), I, 1)
V_b = matrix(rnorm(I), I, 1)
signal <- matrix(0, L, 1)
for( j in (n:L)){
for( tao in ((j-n+1):j)) {
signal[j] = (signal[j] + abs(V_s[tao] - V_b[tao]))
}
signal[j] = (signal[j] / (n * V) )
}
【问题讨论】:
-
您使用矩阵而不是向量是否有原因,而 V_s、V_b 和信号似乎只有一列?
-
如果您将
browser()放入for(tao) 循环中,您将能够检查函数的内部工作原理并了解发生了什么。 -
@juba ,我在后面的方法中使用了矩阵格式,但本质上是的,它是一个向量。
-
关于加速 R 代码的一般建议:stackoverflow.com/a/8474941/636656