【问题标题】:I would like to average the first n columns based on duplicate values of the n+1th column我想根据第 n+1 列的重复值对前 n 列进行平均
【发布时间】:2013-03-07 11:30:14
【问题描述】:

我在其中一列中有一个包含重复数字的矩阵。我想对具有重复数字的行进行平均。例如,我在第 3 列的矩阵 A 中有重复值:

A =   
    1         2         1
    4         4         2
    5         4         2
    4         5         2
    5         5         3
    10        3         3

我想得到

B =
    1         2         1
    4.3333    4.3333    2.0000
    7.5000    4.0000    3.0000

其中每一行是第 3 列重复行的平均值。

谁能帮忙?

【问题讨论】:

  • 你尝试了什么? for 循环是否有问题(除了它可能会更有效地完成)?

标签: matlab matrix average


【解决方案1】:

以下单行对列N 中具有重复值的所有行进行平均。

cell2mat(arrayfun(@(x)mean(A(A(:, N)==x,:),1), unique(A(:, N)), 'Uniform', 0))

示例

让我们按照您的示例对第 3 列中所有重复的行进行平均:

A = [1 2 1; 4 4 2; 5 4 2; 4 5 2; 5 5 3; 10 3 3];
N = 3;
B = cell2mat(arrayfun(@(x)mean(A(A(:, N)==x,:),1), unique(A(:,N)), 'Uniform', 0))

结果是:

B =
    1.0000   2.0000   1.0000
    4.3333   4.3333   2.0000
    7.5000   4.0000   3.0000

【讨论】:

  • 非常感谢 EitanT。我觉得有点傻。这对我很有用
猜你喜欢
  • 2021-03-30
  • 1970-01-01
  • 2018-07-31
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-10-14
  • 2022-01-17
  • 1970-01-01
相关资源
最近更新 更多