在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