2015-10-18 1 views
3

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

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

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

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

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

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

ответ

3

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

[u, ~, v] = unique(A(:,2:end), 'rows', 'stable'); 
B = [accumarray(v, A(:,1)) u]; 
+0

Блина, теперь вы даже не ждать для меня, чтобы отправлять неэффективное решение: D Хорошей работы! Снова я посмотрел на 'help accumarray' безрезультатно. Возможно, я должен оставить эти вопросы вам в первую очередь;) –

+0

@AndrasDeak Это идиоматическое использование' accumarray'. Вы научитесь любить его :-) –

+0

Я не уверен ... мне это очень чужды каждый раз, когда я это вижу :) Просто не подходит для моего мышления. Но мне редко приходится делать такие вещи, так что это нормально :) –

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