【问题标题】:Average of subgroup of 2nd column, grouped by 1st column第 2 列子组的平均值,按第 1 列分组
【发布时间】:2016-02-26 11:57:07
【问题描述】:

假设我有矩阵 A。第一列是“组”。然后我想计算每组第二列的平均值。所以我想创建B。

A=
 1  2
 1  3
 2  4
 2  2

B=
 1  2.5
 2  3

到目前为止,我做的最好的事情是构造一个 long for 和 if 循环并使用平均函数到达 B。

但我想会有更简单的方法。有吗?

【问题讨论】:

  • @Dan Lol,我从来不知道 accumarray。我基本上为这种情况编写了自己的 mex 函数:P

标签: matlab data-manipulation


【解决方案1】:

我之前没有使用过accumarray,所以由于@Dan 的评论,我决定试一试。

起初我尝试了一个简单的版本并使用histc 来计算出现次数以获得所需的平均值...(请注意,accumarray 将按照与unique 相同的顺序对输出进行排序,因此将正确计算平均值)

%// Naive version
ua = unique(A(:,1)); %// use as histc bins (or sorted "group" values)
result = accumarray(A(:,1), A(:,2)) ./ histc(A(:,1), uA);

这里,accumarray 通过对 A(:,2) 中与 A(:,1) 中相同下标相对应的所有条目求和来进行操作。

但后来我意识到,通过将可选的 fun 参数传递给 accumarray 将“summing”更改为“mean”,您可以将其作为单行符来执行:

%// one-liner
result = accumarray(A(:,1), A(:,2), [], @mean);

【讨论】:

猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-02-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-05-26
相关资源
最近更新 更多