# 如何处理成对的值? [英] How to deal with paired values?

### 问题描述

Say I have a vector of independent variable values

``````v =[ 1 2 2 1 1 .5 1 2 .5 .5 1]
``````

``````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.

### 推荐答案

``````>> [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
``````