【发布时间】:2013-12-12 08:14:16
【问题描述】:
correlation = zeros(length(s1), 1);
sizeNum = 0;
for i = 1 : length(s1) - windowSize - delta
s1Dat = s1(i : i + windowSize);
s2Dat = s2(i + delta : i + delta + windowSize);
if length(find(isnan(s1Dat))) == 0 && length(find(isnan(s2Dat))) == 0
if(var(s1Dat) ~= 0 || var(s2Dat) ~= 0)
sizeNum = sizeNum + 1;
correlation(i) = abs(corr(s1Dat, s2Dat)) ^ 2;
end
end
end
这里发生了什么:
- 遍历 s1 中的每个值。对于每个值,获取 s1 的切片 直到 s1 + windowSize。
- 对 s2 执行相同操作,仅在中间 delta 之后获取切片。
- 如果两个切片中的任何一个都没有 NaN 并且它们不是平坦的, 然后得到它们之间的相关性并将其添加到 相关矩阵。
【问题讨论】:
-
请解释或删除
if(correlation(i) > 0.85),end -
好了,完成了。有什么办法可以矢量化吗?抱歉,我是 Matlab 的新手。
-
length(isnan(s1Dat))是什么?不总是和length(s1Dat)一样吗?这段代码发生了什么??? -
这是检查 s1Dat 向量中 NaN 的长度。所以,不是。让我编辑它以显示我在做什么。
-
@gran_profaci:您没有检查 nan。
length(isnan([nan,1]))为 2,取值是 nan 还是 other 无关紧要。
标签: performance matlab loops optimization vectorization