首页 > 解决方案 > 在matlab中处理NaN,简单的任务

问题描述

我正在使用 matlab 中的数据。

见代码:

x = rand(10,1)
y = [1,2,3,4,5,6,7,8,9,10]'
z = [NaN, NaN, NaN, NaN, 1, 2, 3, 4]'

ww = mean(z)-mean(y)

由此,我该ww = Nan如何处理这些 NaN 值,我希望 ww 是,

ww = 8.5-2.5

8.5 来自 y 中的最后四个数字,2.5 来自 z 中的最后四个数字。

我在 MATLAB 中使用时间序列数据进行回归,对于某些系列,在系列开始时缺少数据 NaN。我想知道如何处理它们,上面的例子是一个完整的最小例子。

编辑:

对于一个稍微复杂一点的例子,尝试使用 archtest

clear;
%data
data = xlsread('RETURNS.xlsx',2);

for jj = 2:51
    for ii = 1:12
        residuals = data(:,jj) - mean(data(:,jj));
        h(jj,ii) = archtest(residuals,'Lags',ii);
    end
end

某些列中有 NaN。

标签: matlab

解决方案


回答原始问题:

您可以通过提供标志告诉mean函数和其他几个忽略值:NaNomitnan

 y = [1,2,3,4,5,6,7,8,9,10]'
 z = [NaN, NaN, NaN, NaN, 1, 2, 3, 4]'

 ww = mean(z,'omitnan')-mean(y,'omitnan')

其他几个函数,如max, min, sum,prod等也接受这个标志。

顺便说一句,如果您正在使用时间序列数据,您可能需要检查是否可以使用timetable. 它可能会简化您的一些工作流程。

回答更新的问题

我不确定是什么archtest,因为它不在我的专业领域,但如果您的工作流程可以简单地删除 NaN,那么您可以将rmmissing其用作预处理步骤来删除它们。但是,我不确定这是否会影响 的含义Lags,因为您正在删除索引。我认为在这种情况下,您将不得不决定对您的数据执行什么操作。如果您只是想用其他值(如 0)替换 NaN,您可以使用它fillmissing来执行此操作。


推荐阅读