Взвешенная сумма элементов в матрице - Matlab? - PullRequest
1 голос
/ 20 мая 2011

У меня есть две 50 x 6 матрицы, скажем A и B.Я хочу назначить веса каждому элементу столбцов в матрице - больший вес для элементов, встречающихся ранее в столбце, и меньший вес для элементов, встречающихся позже в том же столбце ... аналогично для всех 6 столбцов.Примерно так:

cumsum(weight(row)*(A(row,col)-B(row,col)); % cumsum is for cumulative sum of matrix

Как мы можем сделать это эффективно, не используя циклы?

1 Ответ

3 голосов
/ 20 мая 2011

Если у вас есть вектор веса w как вектор 50x1, то вы можете переписать свой код как

cumsum(repmat(w,1,6).*(A-B))

Кстати, я не знаю, почему у вас работает cumsumна скаляр в цикле ... это не имеет никакого эффекта.Я предполагаю, что вы имели в виду то, что вы хотели сделать со всей матрицей.Вызов cumsum для матрицы будет работать по умолчанию для каждого столбца.Если вам нужно работать со строками, вы должны вызвать его с необязательным аргументом измерения как cumsum(x,2), где x - это любая матрица, которую вы имеете.

...