在Matlab中处理NaN,简单的任务

时间:2018-12-03 14:09:18

标签: matlab

我正在使用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 = 8.5-2.5

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

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

编辑:

对于一个稍微复杂的示例,尝试使用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的地方。

1 个答案:

答案 0 :(得分:3)

原始问题的答案:

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

 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')

maxminsumprod等其他一些功能也接受此标志。

此外,如果要处理时间序列数据,则可能要检查是否可以使用timetable。它可以简化您的某些工作流程。

已回答问题的答案

我不确定archtest的功能,因为这不在我的专业领域,但是如果您的工作流程只需删除NaN很好,那么您可以使用rmmissing作为预处理步骤将其删除。我不确定这是否会影响Lags的含义,因为您要删除索引。我认为在这种情况下,您将必须决定适合数据处理的方式。如果您只想用其他值(例如0)替换NaN,则可以使用fillmissing来完成。