【问题标题】:Operation on a column with respect to other columns相对于其他列对列的操作
【发布时间】:2016-03-29 06:16:33
【问题描述】:

查看以下代码:

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 循环,并使代码更简单?基本上,我想做的是根据列的值对行进行分组,并对给定“组”的其他值应用操作。

【问题讨论】:

标签: matlab optimization vectorization


【解决方案1】:

这是功能强大的accumarraymean 功能的工作。基本上使用x 第一列中的值作为下标,第二列中的值作为您执行所需计算的实际值:

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

耶!

【讨论】:

  • 它不是将@(x) mean(x)写成函数,而是自己识别@mean,它是一个内置的。无需匿名。
  • 哦,对了,我一直忘记这一点,谢谢@Adriaan
猜你喜欢
  • 2021-07-29
  • 2020-12-29
  • 2016-11-06
  • 2019-03-25
  • 2023-03-28
  • 1970-01-01
  • 2011-10-15
  • 2015-09-08
  • 2019-11-04
相关资源
最近更新 更多