【问题标题】:Optimizing a kind-of-correlation computation优化一种相关性计算
【发布时间】:2013-12-03 07:32:55
【问题描述】:

我现在有一些代码:

data = repmat(1:10, 1, 2);
N = 6;
period = 10;

result = NaN * zeros(1, period);
for i=1:period
    range_indices = i:i+N;
    temp_data = data(range_indices);
    result(i) = sum( temp_data .* fliplr(temp_data));
end

我正在尝试加快速度(对于较大的数据集,例如 period = 2000 和 N = 1600),但我无法将其转换为矩阵运算的形式(例如通过使用 conv 或 xcorr) .

【问题讨论】:

    标签: matlab correlation


    【解决方案1】:

    您应该能够完全线性化它。首先,考虑range_indices。它们具有以下形式:

    1 -> N
    2 -> N+1
    ...
    P -> N+P
    

    其中 P 是周期。我们可以像这样设置这些值的矩阵:

    range_indices = bsxfun(@plus,1:N,(1:period)'-1);
    

    我们可以使用这些直接获取数据,如下所示:

    temp_data = data(range_indices);
    

    那么完成这个功能就相当简单了:

    result = sum(temp_data.*fliplr(temp_data));
    

    最后,这与问题无关,只是我想我要指出的一点 - 将来如果您需要生成 NaN 值的矩阵,您应该改用 nan(1,period)

    【讨论】:

    • bsxfun 太有趣了!
    • 当然,谢谢.. 我在 bsxfun 调用中需要 sum(.. , 2)1:period+1,然后结果相同(而且速度更快)。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-07-14
    • 1970-01-01
    • 1970-01-01
    • 2016-10-03
    • 1970-01-01
    • 2016-06-10
    相关资源
    最近更新 更多