Say I have a vector of independent variable values
v =[ 1 2 2 1 1 .5 1 2 .5 .5 1]
and a vector of response variables
u = [ 5 22 20 4 8 .2 5 12 0 .5 6]
I want to plot u
vs. v
with errorbars, the method needs to work for 100s of possible values for the independent variable. The problem isn't in plotting the error bars, it's in how can I create a vector pair [mean(u(find(v==0.5)), mean(u(find(v==1)), mean(u(find(v==2))]
. Is there a standard automated way of doing this other than sorting v
, then picking out the values of sorted v
and finding the index of v
where v
matches those values? This seems very inefficient.
This might be what you are after if you want to get the means for each unique value of v
in the order in which the unique values appear in v
:
>> [unv,iunv,iv] = unique(v);
>> umeans = accumarray(iv(:),u,[],@mean);
>> [~,ivorder] = sort(iunv);
>> umeans = umeans(ivorder)
umeans =
5.6000
18.0000
0.2333
If you want the means in order of the sorted values of v
, then just use the output of accumarray
without the reordering commands:
>> [unv,iunv,iv] = unique(v);
>> umeans = accumarray(iv(:),u,[],@mean)
umeans =
0.2333
5.6000
18.0000
Just ensure that u
is a row vector.
来源:https://stackoverflow.com/questions/19882413/how-to-deal-with-paired-values