第 2 列子组的平均值,按第 1 列分组

Average of subgroup of 2nd column, grouped by 1st column

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

A=
 1  2
 1  3
 2  4
 2  2

B=
 1  2.5
 2  3

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

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

我以前没有用过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);