【问题标题】:orthogonalize matrix numpy正交化矩阵numpy
【发布时间】:2012-12-06 01:51:33
【问题描述】:

我尝试正交化 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) 应该输出身份。

【问题讨论】:

  • sym 函数与a.dot(a.T) 行没有任何连接- 应该吗?
  • 你说得对,我要编辑示例!
  • 我发现**.5 的行为通常很奇怪,因为让a 成为一些方阵:b=a**.5 然后a != b.dot(b.T)。这不是我所期望的......
  • 我相信你想要scipy.linalg.sqrtm作为矩阵的平方根
  • 似乎是 -.5 的幂,而不是 0.5 的幂。你知道这是否意味着它是矩阵平方根的倒数吗? (另外,您能否更新您的问题以显示新代码?)

标签: python numpy orthogonal


【解决方案1】:

sym 的工作定义是:

from scipy.linalg import sqrtm, inv

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

这是因为将 numpy 矩阵提高到 -.5 的幂并不等于取 matrix square root 然后将其反转,这是公式所要求的。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-01-10
    • 2017-08-09
    • 1970-01-01
    • 2016-11-20
    • 2020-03-23
    • 1970-01-01
    • 2013-02-07
    • 1970-01-01
    相关资源
    最近更新 更多