matlab - Compute mean and standard deviation in 2-d matrix -
x y 1 1.2 1 2.3 1 4.5 2 2.3 2 1.2 2 0.8 convert :
x ymean ystandard-deviation 1 value value how can can convert first matrix second?
simply use logical indexing extract out corresponding y values each unique x value, find mean , standard deviation of resulting y values.
specifically:
x = [1 1 1 2 2 2]; y = [1.2 2.3 4.5 2.3 1.2 0.8]; y1 = y(x == 1); y2 = y(x == 2); m1 = mean(y1); s1 = std(y1); m2 = mean(y2); s2 = std(y2); we get:
>> m1 m1 = 2.6667 >> m2 m2 = 1.4333 >> s1 s1 = 1.6803 >> s2 s2 = 0.7767 m1,m2 , s1,s2 means , standard deviations of y values corresponding x = 1 , x = 2 respectively.
in general, can use accumarray group of y values according each unique x value. way, can accommodate many unique values of x without having need use logical indexing each unique value of x.
in case x unsorted, can sort them first using unique use first output contains of unique x values , use third output reassigns each value of x unique id sorted. these used keys accumarray:
[vals, ~, id] = unique(x); m = accumarray(id, y, [], @mean); s = accumarray(id, y, [], @std); m , s contain mean , standard deviation each unique value of x. also, corresponding positions of m , s correspond same positions in vals.
let's had example instead:
x = [1 2 3 2 4 2 1]; y = [1.2 2.3 4.5 2.3 1.2 0.8 1.6]; if used above code, get:
>> vals vals = 1 2 3 4 >> m m = 1.4000 1.8000 4.5000 1.2000 >> s s = 0.2828 0.8660 0 0 don't alarmed last 2 entries having standard deviation of 0. that's definition when have data set consists of 1 point. there 1 point defined both x = 3 , x = 4.
Comments
Post a Comment