假设我有一个数组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>
答案 0 :(得分:4)
@ Ismail答案中的代码很好,但你也可以试试这个:
>> accumarray(groups', age')
ans =
94
114
32
55
我发现很难从文档中准确地了解accumarray
在其完整的一般性中可以做什么,但这是一个简单用法的一个很好的例子。值得学习如何有效地使用它,因为一旦你完成它就会非常强大 - 它会比arrayfun
快得多(当用在一个更大的例子上时)。
答案 1 :(得分:2)