Нормализация строк/столбцов MATLAB без использования циклов

Можем ли мы использовать bsxfun для нормализации всех строк и столбцов в матрице до заданной нормы, чтобы избежать использования циклов? Вопрос касается MATLAB.

Что я делаю:

   A   % I want to normalize rows in A
   norm_type = 1 ;   % or 2 or inf
   for i = 1 : size(A,1)
      tmp = norm(A(i,:),norm_type);
      A(i,:) = A(i,:)./tmp ;

   end

было бы неплохо использовать вариант, не прибегая к циклам. Спасибо


person Yas    schedule 15.02.2016    source источник
comment
ты пробовал normr?   -  person Alvaro Joao    schedule 16.02.2016
comment
Да, вы можете, но вам нужно рассчитать norm() вручную.   -  person Oleg    schedule 16.02.2016
comment
просто погуглите этот вопрос, и вы найдете решение... mathworks.com/help /nnet/ref/normr.html   -  person Alvaro Joao    schedule 16.02.2016
comment
ну, я думаю, что normr вычисляет норму для каждой строки, что хорошо, но в конце вам нужно разделить каждую строку с этой нормой. Было бы неплохо сделать это без цикла. Также я думаю, что он не допускает разные типы норм по определению, тогда как norm разрешает!   -  person Yas    schedule 16.02.2016
comment
Извините, что ошибся в первом пункте. Тем не менее, я думаю, что эта функция не позволяет использовать разные типы норм.   -  person Yas    schedule 16.02.2016
comment
Я нашел решение своего вопроса, что вы думаете об этом? Этот подход работает очень быстро: %нормализовать норму каждой строки 2: bsxfun(@times,A,1./sqrt(sum(A.*A,2) %нормализовать норму каждой строки 1: bsxfun(@times,A,1./sum(abs(A),2) %нормализовать норму каждой строки inf: bsxfun(@times,A,1./max(A,[],2)   -  person Yas    schedule 16.02.2016
comment
Ответьте на свой вопрос и примите его.   -  person Oleg    schedule 16.02.2016
comment
Проблема решена спасибо!   -  person Yas    schedule 16.02.2016


Ответы (1)


Если норма 2-нормы, то работает следующее:

A = diag(1./diag( sqrt(A*transpose(A)))) * A
person crbah    schedule 15.02.2016