Matlab:将数组中的元素和到另一个数组中
Posted
技术标签:
【中文标题】Matlab:将数组中的元素和到另一个数组中【英文标题】:Matlab: Sum elements in array into another array 【发布时间】:2011-11-20 18:32:19 【问题描述】:假设我有一个数组age=[16 17 25 18 32 89 43 55]
,其中包含某个人的年龄。我还有第二个数组 groups=[1 1 2 1 3 2 1 4]
表示每个人属于哪个组,即第 4 组中只有 55 岁的人,第 1 组中有 3 人等。
我想计算每组中年龄的总和。也就是说,在这种情况下我想要得到的结果是一个包含 4 个元素的数组,它的第一个条目包含属于第 1 组 (16+17+18+43) 的人的年龄总和,第二个条目包含属于第 2 组 (23+89) 等的人的年龄。
我当然知道如何使用 for
循环来做到这一点,但是是否可以使用 sum
的一些变体或类似的东西来做到这一点,以便利用 matlab 的向量优化?
【问题讨论】:
16+17+18之和还需要43个。 【参考方案1】:@Ismail 答案中的代码很好,但你也可以试试这个:
>> accumarray(groups', age')
ans =
94
114
32
55
我发现很难从文档中准确了解accumarray
的全部通用性,但这是简单用法的一个很好的例子。学习如何有效地使用它是值得的,因为一旦你学会了它,它就会非常强大——而且它会比 arrayfun
快得多(在更大的例子中使用时)。
【讨论】:
【参考方案2】:您可以使用arrayfun
和unique
,如下所示:
arrayfun(@(x) sum(age(groups==x)), unique(groups))
【讨论】:
以上是关于Matlab:将数组中的元素和到另一个数组中的主要内容,如果未能解决你的问题,请参考以下文章
如何在scala中的另一个数组中使用一个数组,以便使用一个数组中的每个元素附加到另一个数组中的相应元素?