我有两个值向量,我想在统计上比较它们。为简单起见假设A = [2 3 5 10 15]且B = [2.5 3.1 4.8 10 18]。我想方便地计算标准偏差,均方根误差(RMSE),均值和当前,可能是直方图。你能帮我怎么做才能明白吗?我知道问题可能很简单,但我是新手。非常感谢!
编辑: 这就是我想要实现RMSE的方式。
dt = 1;
for k=1:numel(A)
err(k)=sqrt(sum(A(1,1:k)-B(1,1:k))^2/k);
t(k) = dt*k;
end
然而,它给了我比我预期更大的价值,因为例如3和3.1仅在0.1中有所不同。 这就是我如何计算每个循环的参考值与该循环中相应估计值之间的误差。 你能告诉我,我做对了,或者出了什么问题?
abs_err = A-B;
答案 0 :(得分:0)
循环遍历向量的方式不是逐个元素,而是通过增加向量长度,也就是说,您在每次迭代时比较以下内容:
A(1,1:k) B(1,1:k)
-------- --------
k=1 [2] [2.5]
=2 [2 3] [2.5 3.1]
=3 [2 3 5] [2.5 3.1 4.8]
....
在任何时候你都不会只比较 2和2.1!
假设A
和B
是长度相同的向量(并且都是列向量或行向量),那么您需要函数std(A-B)
,mean(A-B)
,如果你在matlab交换中查找,您会找到用户提供的rmse(A-B)
,但您也可以将RMSE计算为sqrt(mean((A-B).^2))
。至于显示直方图,请尝试hist(A-B)
。
在你的情况下:
dt = 1;
for k=1:numel(A)
stdab(k) = std(A(1,1:k)-B(1,1:k));
meanab(k) = mean(A(1,1:k)-B(1,1:k));
err(k)=sqrt(mean((A(1,1:k)-B(1,1:k)).^2));
t(k) = dt*k;
end
如果要计算每个向量对差异hist(A(1,1:k)-B(1,1:k))
的直方图,您还可以在循环中包含A(1,1:k)-B(1,1:k)
。