代码之家  ›  专栏  ›  技术社区  ›  eLearner

矩阵向量乘法

  •  1
  • eLearner  · 技术社区  · 7 年前

    设$xx=(I-u uT/(uT u))x$,其中I是单位矩阵,x是向量,u是向量,uT是转置的u,xx是结果向量。

    我想用python实现这个等式,所以我尝试了以下方法,但我不确定我的代码是否对应于等式所表达的内容:

    # given u and x, example:
    u = np.array([ 0.7231519  -0.36004635 -0.82970352  1.1832742 ])
    x = np.array([ 1.10667023 -1.13105657 -0.77213626  1.14220917])
    uuT = np.array([u]) * np.array([u]).T
    uTu = np.dot(u, u)
    xx = (I - uuT / uTu).dot(x)
    

    我上面的代码正确吗?

    1 回复  |  直到 7 年前
        1
  •  1
  •   keepAlive    7 年前

    它看起来是正确的。但是,您可能希望以更传统的方式进行此操作,即仅使用矩阵计算。通常,“u形”向量是列,根据经验可以通过以下方式确认: u 易发生移位。让我们创建 u x 像这样的

    >>> import numpy as np
    >>> u = np.array([ 0.7231519,  -0.36004635, -0.82970352, 1.1832742 ])[:,np.newaxis]
    >>> x = np.array([ 1.10667023, -1.13105657, -0.77213626, 1.14220917])[:,np.newaxis]
    >>> x.shape
    (4, 1) # four rows and one column
    

    cartesian product (这实际上可以看作是 covariance matrix

    >>> uuT = np.dot(u, u.T)
    >>> uuT
    array([[ 0.52294867, -0.2603682 , -0.60000168,  0.85568699],
           [-0.2603682 ,  0.12963337,  0.29873172, -0.42603356],
           [-0.60000168,  0.29873172,  0.68840793, -0.98176677],
           [ 0.85568699, -0.42603356, -0.98176677,  1.40013783]])
    

    和(标量)平方和

    >>> uTu = np.dot(u.T, u)
    >>> uTu
    array([[ 2.74112781]])
    

    最后

    >>> I = np.eye(4)
    >>> np.dot(I - uuT / uTu, x)
    array([[ 0.26253613],
           [-0.71077502],
           [ 0.19637539],
           [-0.23902499]])