2011-08-26 5 views
18

MATLAB에서 행렬에 norm을 호출하면 벡터 규범의 배열 대신 "행렬 표준"(스칼라 값)으로 알려진 것을 반환합니다. 루핑없이 행렬에서 각 벡터의 표준을 얻고 MATLAB의 벡터화를 이용하는 방법이 있습니까?MATLAB에서 벡터 배열의 벡터 규범

+0

어떨까요? –

답변

24

element-wise arithmetic operators 및 주어진 매트릭스 차원 (예 : SUMMAX)에서 작동하도록 정의 된 함수를 사용하여 매트릭스의 각 열 또는 행의 표준을 직접 계산할 수 있습니다. 다음은 매트릭스 M에 대한 몇 가지 열이 많다는 기준을 계산할 수있는 방법은 다음과 같습니다 이러한 규범은 쉽게 ...,1에서 ...,2에 치수 인수를 변경하여 대신 열 행에서 작동하도록 할 수

twoNorm = sqrt(sum(abs(M).^2,1)); %# The two-norm of each column 
pNorm = sum(abs(M).^p,1).^(1/p); %# The p-norm of each column (define p first) 
infNorm = max(M,[],1);   %# The infinity norm (max value) of each column 

.

+3

어쩌면 SUM 및 MAX가 작동하는 차원을 명시 적으로 지정해야합니다. 그러면 행 기준 규범으로 전환하는 것이 더 쉬울 것입니다. – Amro

+0

@Amro : 좋습니다. 끝난! – gnovice

+2

'M'이 실수로만 구성되어있는 경우'.2 2 '가 효과적으로 부정 부호를 없앰으로써'abs (M)'을'twoNorm'에서'M'으로 바꿀 수 있습니다. – kroimon

1

2 개의 표준에 대한 기존 구현을 향상시킬 수 있습니다.

twoNorm = sqrt(sum(abs(M).^2,1)); # The two-norm of each column 

abs(M).^2

은 제곱 직선을 얻을 필요 제곱근의 전체 무리를 계산하는 것입니다.

훨씬 더

는해야 할 일 :

twoNorm = sqrt( 
       sum(real(M .* conj(M)), 1) 
      ) 

이 효율적으로 실제와 M.

복잡한 real()가 보장하여 처리하는 sum과 실수를 통해 sqrt 행위 (0 가상의 구성 요소가 아닌 복소수).

0

버전 2017b부터는 vecnorm을 사용할 수 있습니다.