我需要在Matlab中使用快速方法来执行类似的操作(我正在处理大量向量,因此正常循环需要永远!):
从这样的矢量
[0 0 2 3 0 0 0 5 0 0 7 0]
我需要得到这个:
[NaN NaN 2 3 3 3 3 5 5 5 7 7]
基本上,每个零值都替换为先前非零值的值。第一个是NaN
,因为之前没有非零元素
在向量中。
答案 0 :(得分:5)
试试这个,虽然不确定速度。必须运行,所以如果你需要,解释必须在以后进行:
interp1(1:nnz(A), A(A ~= 0), cumsum(A ~= 0), 'NearestNeighbor')
答案 1 :(得分:2)
试试这个(它使用R2014b中引入的cummax
函数):
i1 = x==0;
i2 = cummax((1:numel(x)).*~i1);
x(i1&i2) = x(i2(i3));
x(~i2) = NaN;
答案 2 :(得分:0)
答案 3 :(得分:-2)
我曾经遇到过类似的问题,并认为处理它的最有效方法是编写mex
文件。 c++
循环非常简单。在您弄清楚如何使用mex
界面之后,这将非常简单。