Матрица нормализации строк - PullRequest
4 голосов
/ 12 декабря 2011

Есть ли эффективный (скорость вычисления + количество нажатий клавиш) способ нормализации строк в MATLAB с использованием встроенных функций?

Это то, что я придумал до сих пор

A = rand(m, n); % m rows, n cols
v = pdist2(zeros(1, size(A, 2)), A);
normA = diag(1./v) * A;

1 Ответ

7 голосов
/ 12 декабря 2011

Предполагая, что вы хотите, чтобы суммы строк были 1:

bsxfun(@times, A, 1./(sum(A, 2)))

Редактировать

Если вы ищете норму l2, как @Oli предлагает ниже, то

bsxfun(@times, A, 1./sqrt(sum(A.^2, 2)))

В этом случае вы можете изящно обработать суммы нулевых строк, выполнив

bsxfun(@times, A, 1./(max(sum(A, 2), eps)))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...