2011-12-12 2 views
4

내장 함수를 사용하여 MATLAB에서 행 정규화를 수행하는 데 효율적인 (계산 속도 + 키 스트로크 크기) 방법이 있습니까? 당신이 찾고 있다면행 정규화 행렬

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

편집

을 :

는 지금까지

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

정규화를 수행하여 제로 행 합계를 처리 할 수 ​​있습니다. 행 요소의 합계를 최대 한 개 추가 하시겠습니까? 또는 행의 최대 요소를 +/- 1로 제한 하시겠습니까? – Kavka

답변

7

당신이 1 할 금액을 행하고자 가정 내놓았다 한 것입니다 @Oli가 아래 제시 한 12 표준에 대해

이 경우

9,113,210, 당신은 반 우아하게 많은 것을 의미 할 수

bsxfun(@times, A, 1./(max(sum(A, 2), eps))) 
+0

안녕 하 새요. 그의 코드에 따르면, 나는 그가 L2 정규화를 필요로한다고 생각한다 ...'1./sqrt(sum(A.^2, 2))'. 왜냐하면'pdist2'는 L2 거리를 L-2 놈인 제로 벡터로 계산하기 때문입니다. – Oli

+0

고마워요 :) 기술적으로는 l2 (little L) 표준입니다. dantswain