2013-02-20 4 views
2

Имея матрицу размера n x 3, я хотел бы суммировать значения третьей строки по группам, определенным 1-м и 2-м столбцами.Как группируются суммы по нескольким столбцам?

Учитывая конкретный пример

A =[0.0050 0.0050 0.0050 
    0.0050 0.0050 0.0150 
    0.0050 0.0050 0.0250 
    0.0050 0.0050 0.0350 
    0.0050 0.0150 0.0050] 

Я хотел бы подвести третий столбец таким образом, что я хотел бы получить матрицу

SuMa = [0,05 0,8 0,05; 0,05 0,15 0,005];

Я попытался создать группы, вызвав accumarray (A (:, [1 2]), A (:, 3)), но он возвращает ошибку: Первый вход SUBS должен содержать положительные целые индексы.

Тогда я попытался обойти сначала создать

ind = A(:, [1,2])*1000; 

, а затем

accumarray(ind, A(:,3)) 

, но он вернулся матрицу 5 х 15, который не является результатом я хотел бы получить.

Кто-нибудь знает, как суммировать строки, сгруппированные по комбинации выбранных столбцов (эквивалентно SQL SELECT a, b, SUM (c) FROM A GROUP BY a, b)?

Спасибо!

ответ

3

[~,~,ind]=unique(A(:,1:2),'rows') дает вам индекс/индекс, полезный для accumarray. Нижние индексы первого аргумента там должны ссылаться на позиции во втором (то есть на вектор-столбец A(:,3)). Не знаете, почему вы ожидаете, что матрица данных размером 2 на 5, а не индексы, сделает что-нибудь там.

ans(ind) даст вам вектор-столбец с таким количеством строк, как A.

Смежные вопросы