矩阵向量乘法
Matrix vector multiplication
设$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)
我上面的代码正确吗?
看起来是正确的。但是,您可能希望以更传统的方式执行此操作,即仅使用矩阵计算。通常,"u-like" 向量是列,根据经验,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
然后必须计算 u)
的 cartesian product (which actually can be seen as a first approximation of the 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]])
设$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)
我上面的代码正确吗?
看起来是正确的。但是,您可能希望以更传统的方式执行此操作,即仅使用矩阵计算。通常,"u-like" 向量是列,根据经验,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
然后必须计算 u)
的 cartesian product (which actually can be seen as a first approximation of the 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]])