【问题标题】:multiplying a numpy lhs Unit eigenvector times a numpy matrix将 numpy lhs Unit eigenvector 乘以 numpy 矩阵
【发布时间】:2014-02-20 19:42:47
【问题描述】:

我有一个矩阵T:

[ 0.2  0.4  0.4]
[ 0.8  0.2  0. ]
[ 0.8  0.   0.2]

我想将它乘以一个 lhs 行向量 (s1,s2,s3) 并将乘积表达式设置为等于相应 rhs 列向量的元素,所以它会是

vl * T = s( ..., ..., ...)

这将等效于求解三个线性方程,您可以从中求解特征向量元素直至一个比例因子。将元素之和设置为 1,然后为您提供单位特征向量。

例如,首先,将 lhs 行向量乘以矩阵的第一列并设置乘积等于 s1,得到等式 0.2 x s1 + 0.8 x s2 + 0.8 x s3 = s1。

另外两个方程是通过将 lhs 行向量乘以矩阵的第二列和第三列得到的,并将乘积分别设置为 s2 和 s3。 求解这三个方程将为您提供 s1、s2 和 s3 之间的相对值。将这些之和设置为 1 将为您提供单位特征向量元素。

我想用 python 来做这件事,这是我的尝试:

    >>> import numpy as np
    >>> from scipy.linalg import eig
    >>> np.set_printoptions(precision=4)
    >>> T = np.mat("0.2 0.4 0.4;0.8 0.2 0.0;0.8 0.0 0.2")
    >>> np.set_printoptions(precision=4)
    >>> w, vl, vr = eig(T, left=True)
    >>> vlUnit = vl[:,1]/sum(vl[:,1])
    >>> s = vlUnit 
    >>> s
    array([  7.3543e+15,  -3.6772e+15,  -3.6772e+15])

所以我知道vlVlUnit 都是类型numpy.arrayT 是矩阵

我也看不懂s的结果。

我转换了,它的 7354300000000000, -3677200000000000, 3677200000000000 在我看来不合适。我做错了什么??

谢谢,

克里斯

【问题讨论】:

  • v1Unit 不是单位向量(如果这是您需要的)。通过除以长度(元素平方和的平方根)得到的单位向量。另外,如果 s 只是单位向量,为什么不直接调用它呢?
  • 恐爪龙,谢谢!我不知道...
  • deinonychusaur 有什么建议吗?
  • s=vl[:,1]/sqrt(sum(vl[:,1]**2)) 像这样?旅鼠给了我!
  • 您有参考资料可供我参考吗?

标签: python numpy linear-algebra eigenvector


【解决方案1】:

这应该给你 v1 单位向量:

v1Unit = np.linalg.norm(v1[:, 1])

【讨论】:

  • 感谢 deinonychusaur,1) v1Unit = np.linalg.norm(v1[:, 1]) 与 v1Unit [:,1]/sqrt(sum(vl[:,1]) 有何不同? *2))? 2) 我是否在 python 中正确地乘以我的 vl * T 来解决问题?
  • 应该是相同的东西,只是看起来更整洁使用 np.linalg.norm
  • 谢谢伙计!我正在学习分配我需要知道我是否正确地做乘法。你有什么想法?
  • v1Unit = np.linalg.norm(v1[:, 1]) 给我一个值 1。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-06-06
  • 1970-01-01
  • 1970-01-01
  • 2018-02-22
  • 2013-11-13
  • 1970-01-01
相关资源
最近更新 更多