matlab - 在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。
解决方案
回答原始问题:
您可以通过提供标志告诉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')
其他几个函数,如max
, min
, sum
,prod
等也接受这个标志。
顺便说一句,如果您正在使用时间序列数据,您可能需要检查是否可以使用timetable
. 它可能会简化您的一些工作流程。
回答更新的问题:
我不确定是什么archtest
,因为它不在我的专业领域,但如果您的工作流程可以简单地删除 NaN,那么您可以将rmmissing
其用作预处理步骤来删除它们。但是,我不确定这是否会影响 的含义Lags
,因为您正在删除索引。我认为在这种情况下,您将不得不决定对您的数据执行什么操作。如果您只是想用其他值(如 0)替换 NaN,您可以使用它fillmissing
来执行此操作。
推荐阅读
- php - 如何在 Ubuntu 服务器 18.04 中安装 php7.1-unzip 来安装 Laravel5.7
- http - 我们可以在“master”以外的领域将用户添加到 keycloak 中吗?
- java - 输出格式,使用 for 循环或 while 循环增量打印堆中的节点
- swift - 为什么我的 segue 不等到完成处理程序完成?
- linker - 通过使用内联汇编为 Raspberry Pi3 生锈启动代码
- c++ - C2664 无法从“初始化列表”转换参数
- solidity - 你能检测出 msg.sender 是否是智能合约吗?
- java - 无法使用 liquibase 独立 shell 脚本
- python - 检查字符串是否仅包含 UTF-8 字符
- go - 如何序列化 [string]reflect.Value 类型的映射?