用nan替换缺失值

时间:2014-04-24 07:45:44

标签: arrays matlab vector replace nan

我有以下变量:

x = [0 1 2 2 3 4 5 6 7 8 9];
y = [0 1 2 nan 3 4 5 6 7 8 9];

我想通过等式传递'y'来给出'y2',例如:

y2 = y.*2;

请注意,这只是一个例子。我的实际方程更复杂。 '真实'等式不允许nans在向量内(因为一个值取决于最后一个)。

但是,如果我不能通过这个等式,我可以输入

y2 = y(~isnan(y)).*2;

y2 =

     0     2     4     6     8    10    12    14    16    18

这将删除nan,然后执行计算。

如何让'y2'回到与'x'相同的长度,即将nan作为第四个值?

类似的东西:

y2 =

     0     2     4   NaN     6     8    10    12    14    16    18

我这样做的原因是我想将'y2'与'x'联系起来,因此它们的大小必须相同。

我意识到我可以做到

x2 = x(~isnan(y))

然后只是对'y2'绘制'x2',但我想找到一种方法,按照我上面指定的方式进行。

1 个答案:

答案 0 :(得分:3)

将NaN索引存储在某处,然后使用它们将新值输入到正确的位置,然后再插回NaN值。

<强>代码

%%// Define function
func1 = @(x)x*2;

%%// Input data - y
y = [0 1 2 nan 3 4 5 6 7 8 9];

%%// Store NaN indices
nan_ind = isnan(y)

%%// Process data on the function
y2(~nan_ind) = func1(y(~nan_ind))
y2(nan_ind) = NaN