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以加快计算速度.
| 归档时间: |
|
| 查看次数: |
3445 次 |
| 最近记录: |