【问题标题】:replace missing values with nan用 nan 替换缺失值
【发布时间】:2014-06-09 09:09:33
【问题描述】:

我有以下变量:

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 在向量内(因为一个值取决于最后一个值)。

但是,如果我不能让 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”,但我想按照我上面指定的方式找到一种方法。

【问题讨论】:

  • 不会简单地y2 = y.*2 做你想做的事吗??
  • 如帖子中指定的“nans”不能通过等式。
  • 我经常使用这些功能,通常只删除 nans 是不安全的。在大多数情况下,有必要在函数中处理它。

标签: arrays matlab vector replace nan


【解决方案1】:

将 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

【讨论】:

    猜你喜欢
    • 2011-04-07
    • 1970-01-01
    • 2020-01-04
    • 2014-10-03
    • 1970-01-01
    • 2021-09-24
    • 1970-01-01
    相关资源
    最近更新 更多