矢量化矩阵中不同对角线的总和

rev*_*nge 9 matlab matrix vectorization dynamic-programming

我想矢量化以下MATLAB代码.我认为它必须简单,但我发现它令人困惑.

r = some constant less than m or n
[m,n] = size(C);
S = zeros(m-r,n-r);
for i=1:m-r+1
    for j=1:n-r+1
        S(i,j) = sum(diag(C(i:i+r-1,j:j+r-1)));
    end
end
Run Code Online (Sandbox Code Playgroud)

的代码计算分数,的表小号,对于动态规划算法,从另一个得分表,Ç.
对角线求和是为所有可能的片段(大小为r)生成用于生成C的各个数据片段的分数.

提前感谢您的任何答案!对不起,如果这个显而易见......

注意
内置的conv2比convnfft更快,因为我的眼睛(r)非常小(5 <= r <= 20).convnfft.m表示r应该> 20表示任何利益.

Jon*_*nas 10

如果我理解正确,你试图计算C的每个子数组的对角线和,你已经删除了C的最后一行和一列(如果你不应该删除行/ col,你需要循环到m-r +1,你需要将整个数组C传递给我的解决方案中的函数).

您可以通过卷积来执行此操作,如下所示:

S = conv2(C(1:end-1,1:end-1),eye(r),'valid');
Run Code Online (Sandbox Code Playgroud)

如果C和r很大,您可能需要查看Matlab文件交换中的CONVNFFT以加快计算速度.