用之前的非零值替换零值

时间:2015-06-09 10:16:08

标签: matlab indexing vectorization

我需要在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,因为之前没有非零元素 在向量中。

4 个答案:

答案 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)

仅供参考,以下是来自交换中心和/或SO列的一些类似/相同的功能。

nearestpoint

尝试knnimpute功能。

或者最重要的是,这个功能旨在完成您的任务:

repnan(显然,首先用NaN替换零值)

答案 3 :(得分:-2)

我曾经遇到过类似的问题,并认为处理它的最有效方法是编写mex文件。 c++循环非常简单。在您弄清楚如何使用mex界面之后,这将非常简单。