版本:我的问题中的问题是我试图S从等式8中找到矩阵,但这个等式有误差.
如何在R中直接获得矩阵的右特征向量?'eigen()'仅给出左特征向量
真的是上一版,我在这里弄得很乱,但这个问题对我来说非常重要:
eigen()从函数帮助中提供一些特征向量矩阵:
"如果'r < - eigen(A)'和'V < - r $ vectors; lam < - r $ values',那么
A = V Lmbd V^(-1)
Run Code Online (Sandbox Code Playgroud)
(最多数字模糊),其中Lmbd =diag(lam)"
也就是说A V = V Lmbd,现在我们检查它是V是矩阵:
set.seed(1)
A<-matrix(rnorm(16),4,4)
Lmbd=diag(eigen(A)$values)
V=eigen(A)$vectors
A%*%V
> A%*%V
[,1] [,2] [,3] [,4]
[1,] 0.0479968+0.5065111i 0.0479968-0.5065111i 0.2000725+0i 0.30290103+0i
[2,] -0.2150354+1.1746298i -0.2150354-1.1746298i -0.4751152+0i -0.76691563+0i
[3,] -0.2536875-0.2877404i -0.2536875+0.2877404i 1.3564475+0i 0.27756026+0i
[4,] 0.9537141-0.0371259i 0.9537141+0.0371259i 0.3245555+0i -0.03050335+0i
> V%*%Lmbd
[,1] …Run Code Online (Sandbox Code Playgroud) 当我使用时,我得到一个错误的特征向量(也通过多次运行检查以确定)matrix.eig().矩阵是:
1.2290 1.2168 2.8760 2.6370 2.2949 2.6402
1.2168 0.9476 2.5179 2.1737 1.9795 2.2828
2.8760 2.5179 8.8114 8.6530 7.3910 8.1058
2.6370 2.1737 8.6530 7.6366 6.9503 7.6743
2.2949 1.9795 7.3910 6.9503 6.2722 7.3441
2.6402 2.2828 8.1058 7.6743 7.3441 7.6870
Run Code Online (Sandbox Code Playgroud)
该函数返回特征向量:
-0.1698 0.6764 0.1442 -0.6929 -0.1069 0.0365
-0.1460 0.6478 0.1926 0.6898 0.0483 -0.2094
-0.5239 0.0780 -0.5236 0.1621 -0.2244 0.6072
-0.4906 -0.0758 -0.4573 -0.1279 0.2842 -0.6688
-0.4428 -0.2770 0.4307 0.0226 -0.6959 -0.2383
-0.4884 -0.1852 0.5228 -0.0312 0.6089 0.2865
Run Code Online (Sandbox Code Playgroud)
Matlab为相同的输入提供以下特征向量:
0.1698 -0.6762 -0.1439 …Run Code Online (Sandbox Code Playgroud) 我有这个恼人的问题,我还没想出来.我有一个矩阵,我想找到特征向量,所以我写道:
val,vec = np.linalg.eig(mymatrix)
Run Code Online (Sandbox Code Playgroud)
然后我得到了vec.我的问题是当我的小组中的其他人使用相同的矩阵(mymatrix)做同样的事情时,我们得不到相同的特征向量!
谁可以提出解释?
我要做如下:我有一组 Vektors v1-vn 对于这些,我需要协方差矩阵(我在做 pca 时得到的)。我还需要协方差矩阵的特征值和特征向量。我按降序对特征值进行排序,然后根据它们对应的特征值对特征向量进行排序。之后,我将 v1 与第一个特征向量相乘,将 v2 与第二个特征向量相乘,依此类推。我归还了我以这种方式得到的 skalar。
R中有什么简单的方法可以查看哪个特征值对应哪个特征向量?
我想知道是否有人可以指向某个特征向量中心伪代码或算法(用于社交网络分析)的方向.我已经在维基百科和谷歌搜索了一些信息,但我找不到任何关于广义算法或伪代码的描述.
谢谢!
我需要计算一个大矩阵的特征值和特征向量(大约1000 * 1000甚至更多)。Matlab的工作速度非常快,但不能保证准确性。我需要它是非常准确的(大约1e-06错误是可以的)并且在合理的时间内(一两个小时可以)。
我的矩阵对称且稀疏。确切的值是:对角线,主对角线下方,对角线上方和对角线上的值。例:
我怎样才能做到这一点?C ++对我来说最方便。
假设我有一个矩阵,我已经找到了特征值并插入了。例如
A =[4 -2; -2 1]
Run Code Online (Sandbox Code Playgroud)
我会用什么来得到特征向量[2; 1]?有eig(),这似乎是解决从开始的本征方程。矩阵 A 只是一个例子。我需要解决一个更大的 6x6 矩阵,它已经插入了特征值。我希望问题很清楚
Scipy 和 Numpy 返回标准化的特征向量。我正在尝试将向量用于物理应用,并且我需要它们不被标准化。
例如
a = np.matrix('-3, 2; -1, 0')
W,V = spl.eig(a)
scipy 返回特征值 (W)[-2,-1]和模态矩阵 (V)(特征值作为列)[[ 0.89442719 0.70710678][ 0.4472136 0.70710678]]
我需要原始模态矩阵[[2 1][1 1]]
我测试了 A = Q * Lambda * Q_inverse 的定理,其中 Q 是具有特征向量的矩阵,而 Lambda 是对角线上具有特征值的对角矩阵。
我的代码如下:
import numpy as np
from numpy import linalg as lg
Eigenvalues, Eigenvectors = lg.eigh(np.array([
[1, 3],
[2, 5]
]))
Lambda = np.diag(Eigenvalues)
Eigenvectors @ Lambda @ lg.inv(Eigenvectors)
Run Code Online (Sandbox Code Playgroud)
返回:
array([[ 1., 2.],
[ 2., 5.]])
Run Code Online (Sandbox Code Playgroud)
返回的矩阵不应该与分解后的原始矩阵相同吗?
我看了看eigvecs和eigen,但他们都没有通过特征值的数量级的特征向量.这是我们必须自己编码的东西吗?
testM=diagm(0=>[1,3,2])
eigvals(testM)
eigvecs(testM)
U=eigen(testM)
U.vectors
U.values
Run Code Online (Sandbox Code Playgroud) eigenvector ×10
eigenvalue ×4
matlab ×2
numpy ×2
r ×2
algorithm ×1
c++ ×1
function ×1
jama ×1
java ×1
julia ×1
pseudocode ×1
python ×1
scipy ×1