как разделить матричные элементы на сумму строк - PullRequest
4 голосов
/ 03 апреля 2011

Я хочу разделить каждый элемент матрицы на сумму строки, которой принадлежит этот элемент. Например:

[1 2      [1/3 2/3 
 3 4] ==>  3/7 4/7]

Как я могу это сделать? Спасибо.

Ответы [ 2 ]

8 голосов
/ 03 апреля 2011

A = [1 2;3 4]

diag (1./sum (A, 2)) * A

2 голосов
/ 24 июля 2017

Я предлагаю использовать bsxfun. Должно быть быстрее и эффективнее использовать память:

bsxfun(@rdivide, A, sum(A,2))

Обратите внимание, что ориентация vecor важна. Столбец разделит каждую строку матрицы, а вектор строки разделит каждый столбец.

Вот небольшое сравнение времени:

A = rand(100);

tic
for i = 1:1000    
   diag(1./sum(A,2))*A;
end
toc

tic
for i = 1:1000    
   bsxfun(@rdivide, A, sum(A,2));
end
toc

Результаты:

Elapsed time is 0.116672 seconds.
Elapsed time is 0.052448 seconds.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...