Matlab:从矩阵回溯路径

时间:2014-04-24 14:22:21

标签: matlab backtracking

我有一个数据:

minval =  NaN   7   8   9   9   9   10  10  10  10
          NaN   NaN 10  10  10  10  10  10  10  10
          NaN   NaN NaN 10  10  9   10  10  10  9
          NaN   NaN NaN NaN 9   9   10  9   10  10
          NaN   NaN NaN NaN NaN 9   10  10  10  10
          NaN   NaN NaN NaN NaN NaN 10  11  10  10
          NaN   NaN NaN NaN NaN NaN NaN 10  10  10
          NaN   NaN NaN NaN NaN NaN NaN NaN 10  10
          NaN   NaN NaN NaN NaN NaN NaN NaN NaN 10
          NaN   NaN NaN NaN NaN NaN NaN NaN NaN NaN

我这样做:

C=size(minval,2);
D1(1,2:end) = minval(1,2:C);
D2 = bsxfun(@plus,minval(2:C-1,3:C),D1(1,1:C-2)');
D2 = [zeros(1,size(D2,2)) ;D2];
D2(D2==0) = NaN;
D1(2,3:end) = nanmin(D2);
D3 = bsxfun(@plus,minval(3:C-1,4:C),D1(2,2:C-2)');
D3 = [zeros(2,size(D3,2)) ;D3];
D3(D3==0) = NaN;
D1(3,4:end)= nanmin(D3);

然后,我想回溯D1(end,end)来自的路径。 有什么帮助吗?谢谢。

1 个答案:

答案 0 :(得分:1)

在MATLAB中,您可以直接索引矩阵的各个部分。这里不需要循环:

C=size(minval,2);
D1(2:C) = minval(1,2:C);

对于这些你没有按照自己的意愿行事,我怀疑:

for e=3:C
  for b=2:e-1
    D2(e)=min(minval(b,e)+D1(b-1));
  end
end

在内部循环中,对于b的每个值(从2到e-1),您将在每一步覆盖D2的值。仅记录b的最后一个值的结果。可能有一种更简单的方法来获得您想要的结果。 min和其他函数不仅适用于两个单值,而且适用于整个矩阵 - 例如你可以这样做:

min(minval)

ans =

   NaN     7     8     9     9     9    10     9    10     9