Matlab 列向量的相关性

Matlab 列向量的相关性,matlab,Matlab,我有两个数据集(D1和D2)D1(1440,5)和D2(1440,5)在不同的位置都有NaN。 D1和D2是5天(列)的1min数据(行)。我的意图是从D1和D2的每一列中删除NaNs,然后计算每一列的相关系数R和p值。所以每列对应5个R和P值 D1 = reshape(Data1,[1440,5]); % D1 and D2 have NaNs at various locations D2 = reshape(Data2,[1440,5]); R = zeros(1,5); P =

我有两个数据集(
D1
D2
D1(1440,5)
D2(1440,5)
在不同的位置都有
NaN
D1
D2
是5天(列)的1min数据(行)。我的意图是从
D1
D2
的每一列中删除
NaN
s,然后计算每一列的相关系数R和p值。所以每列对应5个R和P值

 D1 = reshape(Data1,[1440,5]); % D1 and D2 have NaNs at various locations
 D2 = reshape(Data2,[1440,5]);
 R = zeros(1,5);
 P = zeros(1,5);
 for day = 1:5
 good = isnan(D1)+isnan(D2);

 [R,P] = corrcoef((D1(good(:,1:5)==0)),(D2(good(:,1:5)==0)));
 end

我试着用上面的方法来做这件事,但是我没有成功地得到每列的5个R和p值。有没有办法做到这一点。。请帮忙。任何建议都会非常有用。非常感谢..SS

您需要使用
find(myarray==NaN)
来获取所有包含NaN的索引。将它们替换为您想要的值(可能为0),然后计算CorrThank。。但是我不想用零来代替它,因为它会影响我的相关系数R和P值。用你想要的替换,或者不替换任何东西。您可以简单地使用find(arr==NaN)查找索引,并使用这些索引删除NaN。类似地,您可以使用
find
查找没有任何NaN的索引,并将其用于您的工作。@hagubear
something==NaN
不起作用。删除
NaN
值时,请始终使用
isnan()。假设您有
[1 2 NaN NaN 3 NaN 4]
,通过删除
NaN
您得到的值
[1 2 3 4]
,在原始信号中,2和3相隔3个样本,但结果它们仅相隔1个样本。所以,如果你计算相关性,它就没有意义了。根据信号的属性,您可能能够插值或拥有自己的忽略
NaN
s的相关例程。