2012-12-18 360 views
3

我试图正交化2d-numpy array并失败。我用this方法,并将其翻译成这样的代码:正交矩阵numpy

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

我发现'**。5'的行为通常很奇怪,因为'a'是一个方矩阵:'b = a **。5',然后'a!= b.dot(b.T)'。哪些不是,我期望的... –

回答

4

sym的工作定义是:

from scipy.linalg import sqrtm, inv 

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

这是因为养numpy的矩阵的-0.5功率不等同于服用matrix square root,然后翻转它,这是什么公式需要。