python - 矩阵向量乘法

标签 python vector linear-algebra matrix-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如何进行转置来确认。让我们创建 ux 这样

>>> 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 (实际上可以看作是 u 的 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]])

关于python - 矩阵向量乘法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46817712/

相关文章:

python - 在 Django DRF 中注册多个路由 - 使用和调用 ModelViewSets 或 Generics 中的方法

python - 简单的 python 嵌套循环 - 索引超出范围

c++ - 与另一个类中的类对象一样的 vector

python - Numpy:将矩阵与 3d 张量相乘——建议

math - 如何计算垂直线段的端点?

python - 使用 PyWinAuto(或其他任何工具)与任务栏上的隐藏图标进行交互

python - 如何在 Python 中按字符对字符串进行切片?

c++ - 多次向 std::vector 添加相同的值(重复)

javascript - 右键单击开放层中的特征向量(Javascript)

c# - 如何将 "round"二维向量到最近的 15 度