Matlab: сумма элементов в массиве в другой массив - PullRequest
1 голос
/ 20 ноября 2011

Предположим, у меня есть массив age=[16 17 25 18 32 89 43 55], который содержит возрасты определенного списка людей. У меня также есть второй массив с именем groups=[1 1 2 1 3 2 1 4], который обозначает, к какой группе принадлежит каждый человек, то есть человек в возрасте 55 лет является единственным человеком в группе 4, в группе 1 три человека и т. Д.

Я хочу рассчитать суммарную сумму возрастов в каждой группе. То есть результат, который я хочу получить в этом случае, представляет собой массив из 4 элементов, первая запись содержит сумму возрастов людей, принадлежащих к группе № 1 (16 + 17 + 18 + 43), вторая запись содержит сумму возраст людей, принадлежащих к группе № 2 (23 + 89) и т. д.

Я, конечно, знаю, как это сделать с помощью цикла for, но возможно ли это сделать с помощью некоторого варианта sum или чего-то подобного, чтобы задействовать векторную оптимизацию matlab?

Ответы [ 2 ]

4 голосов
/ 21 ноября 2011

Код в ответе @ Ismail в порядке, но вы также можете попробовать это:

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

Мне трудно получить оценку из документации, что именно может сделать accumarray во всей своей полноте., но это отличный пример простого использования.Стоит научиться эффективно его использовать, так как после того, как вы его отработали, он очень мощный - и будет намного быстрее (при использовании на более крупном примере), чем arrayfun.

2 голосов
/ 21 ноября 2011

Вы можете использовать arrayfun и unique следующим образом:

arrayfun(@(x) sum(age(groups==x)), unique(groups))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...