Matlab:将数组中的元素汇总到另一个数组中

时间:2011-11-20 18:32:19

标签: matlab vector sum

假设我有一个数组age=[16 17 25 18 32 89 43 55],它包含某个人列表的年龄。我还有一个名为groups=[1 1 2 1 3 2 1 4]的第二个数组表示每个人所属的组,即年龄为55岁的人是第4组中唯一的人,第1组中有3人等。

我想计算每组的年龄总和。也就是说,我想在这种情况下获得的结果是一个包含4个元素的数组,它是第一个包含属于第1组(16 + 17 + 18 + 43)的人的年龄总和的条目,第二个条目包含属于第2组(23 + 89)等人的年龄

我当然知道如何使用for循环执行此操作,但是是否可以使用sum或类似的某些变体来执行此操作,以便利用matlab的向量优化?< / p>

2 个答案:

答案 0 :(得分:4)

@ Ismail答案中的代码很好,但你也可以试试这个:

>> accumarray(groups', age')
ans =
    94
   114
    32
    55

我发现很难从文档中准确地了解accumarray在其完整的一般性中可以做什么,但这是一个简单用法的一个很好的例子。值得学习如何有效地使用它,因为一旦你完成它就会非常强大 - 它会比arrayfun快得多(当用在一个更大的例子上时)。

答案 1 :(得分:2)

您可以按如下方式使用arrayfununique

arrayfun(@(x) sum(age(groups==x)), unique(groups))