2012-12-18 2 views
3

2d-numpy array을 직각 화하려고 시도했지만 실패했습니다. 나는 this 접근 방식을 사용하고이 코드로 번역 :행렬을 직교 화

def sym(w): 
    return w.dot((w.T.dot(w))**(-.5)) 

하지만

In [1]: a 
Out[2]: 
array([[ 1.1, 0.1], 
     [ 0.1, 1.1]]) 
In [3]: a = sym(a) 

In [4]: a 
Out[5]: 
array([[ 1.20909392, 2.43574363], 
     [ 2.43574363, 1.20909392]]) 

In [6]: a.dot(a.T) 
Out[7]: 
array([[ 7.39475513, 5.89008563], 
     [ 5.89008563, 7.39475513]]) 

a.dot(a.T)해야 출력 신원.

+0

'sym' 함수는'a.dot (a.T)'줄에 연결되어 있지 않습니다 - 그럴까요? –

+0

네 말이 맞아, 나는 그 예를 편집 할거야! –

+0

'a. = b.dot (b.T)''a. = b.dot (b.T)'와 같이''.5''의 동작이 꽤 이상하게 보입니다. 어느 쪽이 아닌지, 내가 예상했던 것 ... –

답변

4

sym의 작업 정의는 다음

from scipy.linalg import sqrtm, inv 

def sym(w): 
    return w.dot(inv(sqrtm(w.T.dot(w)))) 

이 -0.5의 힘에 NumPy와 행렬을 올리는 것은 화학식 필요한 무엇 인을 반전 한 다음 matrix square root 복용과 일치하지 않기 때문에이다 .