我有一个包含角度的矩阵,我需要计算均值和方差。 对于我这样做的意思: 对于每个角度计算sin和cos并求和所有sin和所有cos 平均值由atan2(sin,cos)给出 它的工作原理 我的问题是如何计算知道平均值的角度方差?
谢谢你的回答
我附上了我的matlab代码:
for i=1:size(im2,1)
for j=1:size(im2,2)
y=y+sin(hue(i, j));
x=x+cos(hue(i, j));
end
end
mean=atan2(y, x);
if mean<0
mean=mean+(2*pi);
end
答案 0 :(得分:3)
我不是100%肯定你在做什么,但也许这会在MATLAB函数mean和var中构建同样的东西。
>> [file path] = uigetfile;
>> someImage = imread([path file]);
>> hsv = rgb2hsv(someImage);
>> hue = hsv(:,:,1);
>> m = mean(hue(:))
m =
0.5249
>> v = var(hue(:))
v =
0.2074
编辑:我假设您有一个图片,因为您的变量名为hue
。但对于任何矩阵都是一样的。
编辑2:也许这就是你要找的东西:
>> sumsin = sum(sin(hue(:)));
>> sumcos = sum(cos(hue(:)));
>> meanvalue = atan2(sumsin,sumcos)
meanvalue =
0.5276
>> sumsin = sum(sin((hue(:)-meanvalue).^2));
>> sumcos = sum(cos((hue(:)-meanvalue).^2));
>> variance = atan2(sumsin,sumcos)
variance =
0.2074
答案 1 :(得分:3)
为了计算角度的方差,您不能使用标准方差。这是计算角度变量的公式
R = 1 - sqrt((sum(sin(angle)))^ 2 +(sum(cos(angle)))^ 2)/ n; 还有类似的其他配方 var(angle)= var(sin(angle))+ var(cos(angle));
价: http://www.ebi.ac.uk/thornton-srv/software/PROCHECK/nmr_manual/man_cv.html
答案 2 :(得分:2)
圆形数据的方差不能被视为实线上无界数据的方差。 (对于非常小的方差,它们实际上是等价的,但是对于大的方差,等价性会崩溃。应该清楚为什么会这样。)我建议N.I. 循环数据的统计分析。费舍尔。本书包含一个广泛使用的圆形方差定义,它是根据与角度对应的单位矢量的平均合成长度计算出来的。
>> sumsin = sum(sin((hue(:)-meanvalue).^2)); >> sumcos = sum(cos((hue(:)-meanvalue).^2));
错了。你无法减去这样的角度。
顺便说一句,这个问题确实与MATLAB无关。您可以在statistics stack exchange
上发布更多/更好的答案答案 3 :(得分:0)
我们遇到了同样的问题,在 python 中,我们可以使用 scipy.cirvar
来解决这个问题,它计算假设在一个范围内的样本的循环方差。例如:
from scipy.stats import circvar
circvar([0, 2*np.pi/3, 5*np.pi/3])
# 2.19722457734
circvar([0, 2*np.pi])
# -0.0
建议的 MATLAB 代码的问题是 [0, 6.28]
的方差应该为零。通过查看 scipy.circvar
的实现,它就像:
# Recast samples as radians that range between 0 and 2 pi and calculate the sine and cosine
samples, sin_samp, cos_samp, nmask = _circfuncs_common(samples, high, low)
sin_mean = sin_samp.mean()
cos_mean = cos_samp.mean()
R = np.minimum(1, hypot(sin_mean, cos_mean))
circular_variance = ((high - low)/2.0/pi)**2 * -2 * np.log(R)