我有一个数据:
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)
来自的路径。
有什么帮助吗?谢谢。
答案 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