我有一个未排序的特征值向量和一个相关的特征向量矩阵.我想根据排序的特征值集对矩阵的列进行排序.(例如,如果特征值[3]移动到特征值[2],我希望特征向量矩阵的第3列移到第2列.)
我知道我可以对O(N log N)via中的特征值进行排序std::sort.如果不滚动我自己的排序算法,我如何确保矩阵的列(相关的特征向量)跟随它们的特征值,因为后者是排序的?
你知道一个很好的库/方法可以用来解决c#中的特征系统吗?
我的数据是2D/3D,我想获得第一和第二特征向量的方向和长度,以评估我的数据在2D空间中的延伸方式.
谢谢
当我试图在Matlab中找到具有重复特征值但没有缺陷的矩阵的特征分解时,它没有返回eignevectors的标准正交矩阵.例如:
k = 5;
repeats = 1;
% First generate a random matrix of eignevectors that is orthonormal
V = orth(rand(k));
% Now generate a vector of eigenvalues with the given number of repeats
D = rand(k,1);
for i = 1:repeats
% Put one random value into another (note this sometimes will result in
% less than the given number of repeats if we ever input the same
% number)
D(ceil(k*rand())) = D(ceil(k*rand()));
end
A = V'*diag(D)*V;
% Now test …Run Code Online (Sandbox Code Playgroud) 我注意到在多次运行eigs()函数后,每次它给出不同但近似的结果.
有没有办法每次都返回相同的结果?输出有时带有"+"符号或" - "符号.
M的内容:
[2, 1] = 1.0
[3, 1] = 0.5
[1, 2] = 1.0
[3, 2] = 2.5
[1, 3] = 0.5
[2, 3] = 2.5
M = M+M'
(d, v) = eigs(M, nev=1, which=:LR)
Run Code Online (Sandbox Code Playgroud)
我尝试在Python中的相同稀疏矩阵上运行相同的函数,尽管矩阵看起来有点不同,我认为它是相同的.左边的值从0开始编号.在朱莉亚,它们从1开始编号.我不知道这是否有很大差异.Julia和Python中的值大致相同,但在Python中,每次评估后它们总是相同的.此外返回蟒蛇值是复数,在朱莉娅真实.
Python代码:
MT的内容:
from scipy.sparse import linalg
(1, 0) 1.0
(2, 0) 0.5
(0, 1) 1.0
(2, 1) 2.5
(0, 2) 0.5
(1, 2) 2.5
eigenvalue, eigenvector = linalg.eigs(M.T, k=1, which='LR')
Run Code Online (Sandbox Code Playgroud)
知道为什么会发生这种行为吗?
编辑:
这些是对四次评估的结果 …
我有列矢量形式的N个特征值.因此,存在与这些特征值对应的N个本征向量,形成特征向量矩阵.
现在,我正在处理的问题要求我按降序对特征值列向量进行排序.如何按照与特征值相同的顺序对特征向量矩阵进行排序以保持对应?
我想通过有限差分方法解决PDE的特征值问题.因此我的问题被简化为矩阵特征值问题.问题是这个矩阵的大小会非常大,如果我使用该函数,eig它会搜索所有特征值和特征向量,这在我看来是浪费时间.
在找到第一个k特征值后,是否有可能使特征值算法停止?(其中k是一个小的正整数)
版本:我的问题中的问题是我试图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) 我有一个m × n × n numpy.ndarray的m个同时对角可平方的矩阵,想numpy用来获取它们的同时特征值。
例如,如果我有
from numpy import einsum, diag, array, linalg, random
U = linalg.svd(random.random((3,3)))[2]
M = einsum(
"ij, ajk, lk",
U, [diag([2,2,0]), diag([1,-1,1])], U)
Run Code Online (Sandbox Code Playgroud)
两个矩阵M同时对角线化,我正在寻找一种获取数组的方法
array([[2., 1.],
[2., -1.],
[0., 1.]])
Run Code Online (Sandbox Code Playgroud)
(直到行的排列)M。是否有内置或简单的方法来实现这一目标?
当解决广义特征值问题A*x = lambda*M*x时,为什么eigh和eigshscipy.sparse.linalg一起使用,如果M是非对角线的?
import mkl
import numpy as np
from scipy import linalg as LA
from scipy.sparse import linalg as LAsp
from scipy.sparse import csr_matrix
A = np.diag(np.arange(1.0,7.0))
M = np.array([[ 25.1, 0. , 0. , 17.3, 0. , 0. ],
[ 0. , 33.6, 16.8, 8.4, 4.2, 2.1],
[ 0. , 16.8, 3.6, 0. , 11. , 0. ],
[ 17.3, 8.4, 0. , 4.2, 0. , 9.5],
[ 0. , 4.2, 11. , 0. …Run Code Online (Sandbox Code Playgroud) 我有一个很大的稀疏矩阵,例如 128000×128000 SparseMatrixCSC{Complex{Float64},Int64} 有 1376000 个存储条目。
如何快速获取稀疏矩阵的所有特征值?是否可以 ?
我尝试eigs使用 128000×128000 存储 1376000 个条目,但内核已死。
我在 jupyter 笔记本上使用 16GB 内存和 Julia 1.3.1 的 mac book pro。