如何处理配对值?

时间:2013-11-09 20:01:52

标签: matlab accumarray

假设我有一个自变量值的向量

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

和响应变量的向量

u = [ 5 22 20 4 8 .2 5 12 0 .5 6]

我想使用错误栏绘制uv的关系,该方法需要为自变量的100个可能值工作。问题不在于绘制误差线,而是如何创建矢量对[mean(u(find(v==0.5)), mean(u(find(v==1)), mean(u(find(v==2))]。除了排序v之外,是否有标准的自动执行方式,然后挑选排序v的值并找到v的索引,其中v与这些值匹配?这似乎非常低效。

1 个答案:

答案 0 :(得分:1)

如果您希望按照v中唯一值的显示顺序获取v的每个唯一值的方法,那么这可能是您所追求的:

>> [unv,iunv,iv] = unique(v);
>> umeans = accumarray(iv(:),u,[],@mean);
>> [~,ivorder] = sort(iunv);
>> umeans = umeans(ivorder)

umeans =

    5.6000
   18.0000
    0.2333

如果您想要按v的排序值的顺序排序,那么只需使用accumarray的输出而不使用重新排序命令:

>> [unv,iunv,iv] = unique(v);
>> umeans = accumarray(iv(:),u,[],@mean)

umeans =

    0.2333
    5.6000
   18.0000

确保u是行向量。

相关问题