在matlab中使用指数函数时应如何处理nan's?如何使用指数平滑函数处理nans
例如,我可以使用的指数平滑函数为:
v = datenum(2008, 1, 1):datenum(2010, 11, 31); % time vector
d = rand(1,length(v)); % data vector
fd = d;
alpha_o = 0.2;
for ii = 2:length(fd);
fd(ii) = alpha_o.*fd(ii) + (1-alpha_o).*fd(ii-1);
end
plot(v,d); hold on; plot(v,fd);
然而,如果我在时间序列楠(或许多的NaN事实证明):
d(10) = nan;
随着时间序列中nan的位置,平滑输出将为nan。
这应该怎么处理?我应该删除所有的nans然后运行该功能吗?
我在想,对我的数据使用指数平滑函数的一点是,它提供了原始系列的平滑和滞后版本。但是,如果你有被移除的nans不会导致结果中的错误?
我看到这个帖子Using exponential smoothing with NaN values,但它并没有真正提供任何有用的提示,我可以在这里适用。
我也想避免楠零件,并说,如果男,使用最后一个已知的平滑值:
fd = d;
alpha_o = 0.2;
for ii = 2:length(fd);
if isnan(fd(ii)) == 1;
fd(ii) = fd(ii-1);
else
fd(ii) = alpha_o.*fd(ii) + (1-alpha_o).*fd(ii-1);
end
end
plot(v,d); hold on; plot(v,fd);
这是最好的解决办法?不知道如果第一个值是nan认为我会怎么做...
你对待nans的方式是你的选择。你可以删除它们,你可以用插值填充它们,或者你可以让你的算法输出NaN作为NaN输入。这取决于你的NaN是什么以及如何创建的。 –
如果您正在进行平滑和插值,通常会删除您的NaN,因为它们会影响您的结果。 – GameOfThrows
我不确定这是否是适合StackOverflow的问题。这是非常基于观点的,取决于你的具体情况以及你希望达到的目标,这在你的问题中是不明确的。 – IKavanagh