相对于其他列的列操作

时间:2015-12-22 21:54:01

标签: matlab optimization vectorization

查看以下代码:

x=[2,3;1,4;1,5;2,4;3,1;3,4];
u=unique(x(:,1));
for i=1:length(u)
    n(i,:)=mean(x(x(:,1)==u(i),:))
end

无论如何都要避免for循环,并使代码更简单?基本上,我想要做的是根据列的值对行进行分组,并对给定“组”的其他值应用操作。

1 个答案:

答案 0 :(得分:2)

对于具有mean功能的强大accumarray,这是一项工作。基本上使用x的第1列中的值作为下标,将第2列中的值作为执行所需计算的实际值:

n2 = accumarray((x(:,1)),x(:,2),[],@mean)

out = [unique(x(:,1)) n2]

out =

    1.0000    4.5000
    2.0000    3.5000
    3.0000    2.5000

耶!