【发布时间】:2014-01-30 20:08:33
【问题描述】:
我需要用前一个元素逐行替换矩阵中的零(或 NaN),所以基本上我需要这个矩阵 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 中矩阵的索引是连续的,并且按列递增,因此它适用于单行或单列,但不能应用相同的确切概念,但需要用多行进行修改,因为每行raw/column 从新开始,必须被视为独立的。我已经尽力了,用谷歌搜索了整个谷歌,但找不到出路。如果我在循环中应用同样的想法,它会变得太慢,因为我的矩阵至少包含 3000 行。谁能帮我解决这个问题?
【问题讨论】:
-
好的,我明白你在转置上的意思了。
-
然而必须再次编辑它以插入 2 个初始零的大小写,并强调它们不应继承前一行的最后一个值这一事实。很抱歉持续编辑,但随着我们的进行,特殊情况和更深入的理解会出现......
标签: matlab loops matrix vectorization