首页 文章

如何在matlab中手动编写相关系数?

提问于
浏览
0

以下是采用两个相等大小的矢量X和Y的函数,并且假设返回包含用于图像对应的单个相关系数的矢量 . 如果给出两个相等大小的向量,该函数应该与matlab中的内置corr(X,Y)函数类似地工作 . 现在我的代码正在生成一个包含多个双数向量的向量,而不是包含单个数字的向量 . 我该如何解决?

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:现在输出向量的格式是正确的,但是值很多都是关闭的 .

1 回答

  • 1

    我建议你使用r = corrcoef(X,Y),它会给你一个2x2矩阵中你想要的标准化r值,你可以只返回r(2,1)条目作为你的答案 . 这样做相当于

    r=(X-mean(X))*(Y-mean(Y))'/(sqrt(sum((X-mean(X)).^2))*sqrt(sum((Y-mean(Y)).^2)))
    

    但是,如果你真的想做你在问题中提到的事情,你也可以这样做

    r=(X)*(Y)'/(sqrt(sum((X-mean(X)).^2))*sqrt(sum((Y-mean(Y)).^2)))
    

相关问题