我想自动更新一些数据,但它有一些缺失值,有没有快速的方法在matlab中执行此操作?如果任何输入是NaN,则xcorr返回NaN数组。
e.g。
data = [1 2 3 4 NaN 2 3 4 1 2 3 4];
xc = xcorr(data, 'biased');
答案 0 :(得分:5)
根据Nzbuu的一些见解,以下作品:
data = [1 2 3 4 NaN 2 3 4 5];
scaled = (data - nanmean(data)) / nanstd(data);
scaled(isnan(data)) = 0;
corr = xcorr(scaled);
在缩放数据之后,有必要插入零,而不是之前,否则这将影响xcorr中使用的mu和std的值。最好这样做,而不是简单地直接计算xcorr,因为xcorr中使用的fft方法对于大数据集要快得多。
答案 1 :(得分:3)
我宁愿从相关性中排除NaN的夫妻而不是引入零。在这种情况下,我将在matlab中使用以下代码,基于corr(Pearson的自相关系数)。
out=zeros(nlags,1);
out(1)=1;
for i=2:nlags+1
out(i)=corr(data(i:end),data(1:end-i+1),'rows','complete');
end
stem(0:nlags,out)
title('sample ACF')
希望它有助于
答案 2 :(得分:2)
不确定。您可以使用索引来仅选择那些不是NaN的项目,并在其上调用xcorr
。
data = [1 2 3 4 NaN 2 3 4 1 2 3 4];
xc = xcorr(data(~isnan(data)), 'biased');