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】:

您可以使用arrayfununique,如下所示:

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

【讨论】:

以上是关于Matlab:将数组中的元素和到另一个数组中的主要内容,如果未能解决你的问题,请参考以下文章

matlab中怎么在数组找一个元素

如何在scala中的另一个数组中使用一个数组,以便使用一个数组中的每个元素附加到另一个数组中的相应元素?

C语言 将一个二维数组行和列的元素互换,存到另一个二维数组中

如何将数组元素反向分配到另一个数组中?我是初学者[重复]

MATLAB的cell数组

matlab怎么来统计数组元素个数