Добавить значения в матрицу MATLAB на основе пар

Приносим извинения, если раньше спрашивали о чем-то подобном. Кажется, что это должна быть простая проблема на первый взгляд, но мне сложно это описать - не говоря уже о решении! Предположим, у меня есть одна матрица 5 x 3, которая выглядит примерно так:

A = [50  1  2
     75  2  3 
     20  2  3
     10  1  1
     90  1  2]

Я хочу суммировать значения в первом столбце везде, где есть пара во 2-м и 3-м столбце, которая дублируется где-то еще. Итак, я пытаюсь преобразовать A (см. Выше) во что-то вроде этой матрицы B 3 x 3, где:

    B = [140  1  2
         95   2  3 
         10   1  1] 

Добавляются только значения из столбца 1, и мне нужно, чтобы они оставались согласованными с парой, которая «заставила» их объединиться. Думаю, я должен также добавить, что порядок значений в столбцах 2 и 3 имеет значение, поскольку пара 3,4 считается другой парой, чем 4,3. (Конечно, мои фактические данные включают значения в столбцах 2 и 3, которые находятся в диапазоне 100, поэтому написание оператора if для каждой возможной комбинации на самом деле не представляется возможным ...)

Мы будем очень благодарны за любые предложения по этому поводу! Я изучал документацию по «find» и наткнулся на что-то под названием «ismember» - нужно ли мне использовать какое-то приложение из этого?


person Mbjones    schedule 18.10.2015    source источник


Ответы (1)


Обычный unique - _ 2_ для работы подходит пара:

[u, ~, v] = unique(A(:,2:end), 'rows', 'stable');
B = [accumarray(v, A(:,1)) u];
person Luis Mendo    schedule 18.10.2015
comment
Блин, теперь ты даже не стал ждать, пока я выложу неэффективное решение: D Отличная работа! Я снова посмотрел на help accumarray безрезультатно. Может, мне стоит оставить эти вопросы вам в первую очередь;) - person Andras Deak; 19.10.2015
comment
@AndrasDeak Это идиоматическое accumarray употребление. Вы полюбите это :-) - person Luis Mendo; 19.10.2015
comment
Я не уверен ... мне это довольно чуждо каждый раз, когда я это вижу :) Просто не соответствует моему образу мышления. Но мне такое редко нужно делать, так что ничего страшного :) - person Andras Deak; 19.10.2015
comment
@AndrasDeak Вы уже используете _1 _... accumarray будет следующим шагом :-D - person Luis Mendo; 19.10.2015