我需要用行中的前一个元素替换矩阵中的零(或NaN),所以基本上我需要这个Matrix X
[0,1,2,2,1,0;
5,6,3,0,0,2;
0,0,1,1,0,1]
变成这样:
[0,1,2,2,1,1;
5,6,3,3,3,2;
0,0,1,1,1,1],
请注意,如果第一行元素为零,它将保持这样.
我知道这已经以矢量化方式解决了单个行或列向量,这是最好的方法之一:
id = find(X);
X(id(2:end)) = diff(X(id));
Y = cumsum(X)
问题是Matlab / Octave中矩阵的索引是连续的并且按列递增,因此它适用于单个行或列,但是不能应用相同的精确概念但需要使用多行修改因为每个原始/列开始新鲜,必须被视为独立.我已经尽力了,谷歌搜索了整个谷歌,但没有找到出路.如果我在循环中应用相同的想法它会变得太慢,因为我的矩阵至少包含3000行.有人可以帮我解决这个问题吗?
最佳答案 Eitan的修改版本的答案是为了避免跨行传播值:
Y = X'; %'
tf = Y > 0;
tf(1,:) = true;
idx = find(tf);
Y(idx(2:end)) = diff(Y(idx));
Y = reshape(cumsum(Y(:)),fliplr(size(X)))';