0

Matlabに2つのサンプルベクトルがあります:

A = [5,3,3,0,4,1,5,0,2,5,5,0,5,3,4,0,1,4,4,0,4,2]; B = [1,0,0,0,1,0,4,0,0,0,0,4,4,0,1,0,0,0,0,0,0,0];

手動でピアソン相関を計算してExcelで計算すると、同じ結果になります(0.667

1 0,667 0,667 1

しかし、MatLabで簡単なコードを試してみたところ:

pearson = corr(A',B');

異なるスコア(0,2139)の結果を返します。

1 0,2139 0,2139 1

たぶんそれはゼロスコア(0)がそれを計算するために使用しているために起こります。欠落している値がmatlabでzero(0)に置き換えられるために発生します。

ピアソン相関では、それを計算するために共同評価された値のみを使用します。(太字の値を参照)

A = [ 5、3、3、0、4、1、5、0、2、5、5、0、5、3、4、0、1、4、4、0、4、2 ] ; _ _ _ _ _ B = [ 1、0、0、0、1、0、4、0、0、0、0、4、4、0、1、0、0、0、0、0、0、0 ] ; _ _ _ _ _

またはそれは簡単にすることができます:

A = [ 5、4、5、5、4 ] ; _ _ _ _ _ B = [ 1、1、4、4、1 ] ; _ _ _ _ _

このための簡単なコードを作成する方法を知っている人はいますか?私は手続き型コードでそれを試しました:最初に、関数をcorated、average_coratedにし、最後に類似性を計算します。時間がかかりすぎる。

前に感謝します:)

4

2 に答える 2

3

最初に適切なデータが配置されている場所のインデックスを取得する必要があります。

goodData = A~=0 & B~=0; %# true wherever there's data for both A and B

pearson = corr(A(goodData),B(goodData));
于 2011-10-27T02:51:19.587 に答える
0

これはワンライナーだと思います:pearson = corr(A(B ~= 0)', B(B ~= 0)')

B ~= 0の対応するエントリがゼロでない場合size(B)はサイズのバイナリ行列を作成し、それ以外の場合はを作成します。同じサイズのバイナリ行列を使用して行列にインデックスを付けることもできるため、これは常に機能するはずです。1B0size(A) == size(B)

于 2011-10-27T02:23:37.127 に答える