以下は、2つの等しいサイズのベクトルXとYをとり、画像対応の単一相関係数を含むベクトルを返す関数です。この関数は、同じ大きさの2つのベクトルが与えられた場合に、matlabの組み込みcorr(X、Y)関数と同様に動作すると考えられます。今、私のコードは、単一の数値を含むベクトルではなく、複数の2数値ベクトルを含むベクトルを生成しています。これをどうやって解決するのですか?matlabに手動で相関係数を書き込むにはどうすればいいですか?
function result = myCorr(X, Y)
meanX = mean(X);
meanY = mean(Y);
stdX = std(X);
stdY = std(Y);
for i = 1:1:length(X),
X(i) = (X(i) - meanX)/stdX;
Y(i) = (Y(i) - meanY)/stdY;
mult = X(i) * Y(i);
end
result = sum(mult)/(length(X)-1);
end
編集:私は画像強度値の等しいサイズのベクトルが与えられたとき、上記myCorr(X、Y)はMATLABのCORR(X、Y)で同じ出力を生成する明確にします。
編集2:出力ベクトルの形式は正しいですが、値は大きく外れています。
可能な構文エラーを行うことができ、質問に言及した何をしたい場合は、これを行うと、しかし
に相当します。 'zx'と' zy'はループ内で特異値になります。私はそれらをベクターとして望んでいると仮定していますか? 'zx(i)'と 'zy(i)'?あなたはベクトル化したいものを計算するだけでループを避けることができます: 'zx =(X-meanX)/ stdX; zy =(Y-平均Y)/ stdY;また、MATLABのバージョンによっては、要素ごとの乗算を明示的に実行する必要があります: 'mult = zx。* zy;'。 – rayryeng
私はいくつかの関数を更新しましたが、私はまだそれが正しい係数を返すとは思わない – Teej
あなたの 'mult'も間違っています。これはループの最後にある1つの値を報告するだけです。 – rayryeng