2014-02-14 4 views
1

У меня есть данные этого типа в MATLABСуммируя значения строки в MATLAB

1 1 10 
1 2 10 
1 2 3 
2 1 1 
2 1 25 
2 3 4 

Из выше набора данных я хочу что-то вроде этого

1 1 10 
1 2 13 
2 1 26 
2 3 4 

в основном суммирует отсчеты. Как я могу сделать это эффективно в Matlab?

Мои фактические данные

 1653082  94751   1 
    1653082  133609   1 
    1653082  15712   1 
    1653082  15712   1 
    1653082  15712   1 
    1653082  87905   22 
+0

«Сумма подсчета»? Не могли бы вы лучше объяснить? –

+0

@ LuisMendo. Да суммировать подсчеты, который в основном является третьим столбцом – user34790

ответ

1

Обычное сочетание unique и accumarray может сделать работу:

data = [1653082  94751   1 
     1653082  133609   1 
     1653082  15712   1 
     1653082  15712   1 
     1653082  15712   1 
     1653082  87905   22]; 

[ii, ~, kk] = unique(data(:,1:2),'rows'); 
vv = accumarray(kk, data(:,3)); 
result = [ ii vv ]; 

В результате в этом примере:

result = 
    1653082  15712   3 
    1653082  87905   22 
    1653082  94751   1 
    1653082  133609   1 
+0

Я пробовал свой метод по моим фактическим данным, указанным в вопросе, и это показывает проблему с памятью? – user34790

+0

@ user34790 Ну ... если ваши данные очень большие, я думаю, это может случиться –

+0

Любое решение, как я могу его преодолеть. Например, в конкретных данных, которые я дал в вопросе – user34790

1

В sparse output option of accumarray решает эти проблемы памяти и устраняет необходимость f или unique. Использование фактических данных внизу страницы:

>> R = accumarray(data(:,1:2),data(:,3),[],@sum,0,true) 
R = 
      (1653082,15712)     3 
      (1653082,87905)     22 
      (1653082,94751)     1 
      (1653082,133609)     1 
>> [ii,jj] = find(R); 
>> M = [ii jj nonzeros(R)] 
M = 
    1653082  15712   3 
    1653082  87905   22 
    1653082  94751   1 
    1653082  133609   1 
+1

Вы можете напрямую использовать 'R = разреженный (данные (:, 1), данные (:, 2), данные (:, 3));'. 'sparse' делает неявный' accumarray' –

+0

Это правда. Флорис продолжает напоминать мне этот вариант ... и я все время забываю. :) – chappjc

+0

Или даже 'spconvert (data)'! Просто узнал об этой функции –

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