Arrays 用nan替换缺少的值
我有以下变量:Arrays 用nan替换缺少的值,arrays,matlab,vector,replace,nan,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; 注意,这只是一个例子。我得到的真实方程式更复杂。“实”方程不允许NaN位于向量内(因为一个值取决于最后一个值) 但是,如果我不能让Nan通过等式,我可以键入 y2 = y(~isnan(y)).*2; y2 = 0 2 4 6 8 10
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;
注意,这只是一个例子。我得到的真实方程式更复杂。“实”方程不允许NaN位于向量内(因为一个值取决于最后一个值)
但是,如果我不能让Nan通过等式,我可以键入
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))
然后用‘x2’和‘y2’作图,但我想找到一种方法,按照上面指定的方法来做 将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
不会简单地
y2=y.*2
做你想做的事吗?“nans”一词不能通过等式传递。我经常使用这样的函数,仅仅删除nans通常是不安全的。在大多数情况下,有必要在函数中处理它。