标签: eigenvalue

找到给定特征值R的特征向量

我有一个矩阵100x100,我发现它是最大的特征值.现在我需要找到对应于这个特征值的特征向量.我怎样才能做到这一点?

r eigenvalue eigenvector

6
推荐指数
1
解决办法
1万
查看次数

计算大矩阵特征值的最快方法

到目前为止,我使用 numpy.linalg.eigvals 来计算具有至少 1000 行/列的二次矩阵的特征值,并且在大多数情况下,其条目的大约五分之一非零(我不知道这是否应该被视为稀疏矩阵)。我发现另一个主题表明 scipy 可能会做得更好。

但是,由于我必须计算数十万个大小不断增加的大型矩阵的特征值(可能高达 20000 行/列,是的,我需要它们的所有特征值),因此这总是需要很长时间。如果我能加快速度,即使是最微小的一点,那很可能是值得的。

所以我的问题是:在不限制自己使用 python 的情况下,是否有更快的方法来计算特征值?

python performance eigenvalue sparse-matrix adjacency-matrix

6
推荐指数
1
解决办法
9979
查看次数

Numpy eig/eigh 给出对称正半定矩阵的负值

GCN后的CIFAR数据集代码如下:

xtx = np.dot(dataset.train_data[i].transpose(), dataset.train_data[i])
e, q = np.linalg.eigh(xtx)
print(np.max(e), np.min(e))
Run Code Online (Sandbox Code Playgroud)

产生以下输出:

2.65138e+07 -0.00247511
Run Code Online (Sandbox Code Playgroud)

这是不一致的,因为它xtx是对称正半定的。我的猜测是,这可能是由于较早地应用了 GCN,但最小特征值仍然不接近 0?

更新:所以我的矩阵的条件数是 8.89952e+09。实际上我之前忘记取出平均值,所以现在最大特征值是~573,而最小值是-7.14630133e-08。我的问题是我正在尝试做 ZCA。在这种情况下,我应该如何进行?向xtx或向特征值添加对角线 petrubtion ?

numpy linear-algebra eigenvalue

6
推荐指数
1
解决办法
1075
查看次数

抑制可忽略不计的复杂 numpy 特征值?

我正在计算协方差矩阵的特征值,该矩阵是实数且对称正半定的。因此,特征值和特征向量应该都是实数,但是numpy.linalg.eig()返回具有(几乎)零虚部的复数值。

协方差矩阵太大,无法在此处发布,但特征值如下

[1.38174e01+00j, 9.00153e00+00j, ....]
Run Code Online (Sandbox Code Playgroud)

向量中最大的虚部在 处可以忽略不计-9.7557e-16j

我认为这里存在一些机器精度问题,因为显然虚部可以忽略不计(并且考虑到我的协方差矩阵是实数正半定义)。

有没有办法抑制使用 numpy eig (或 scipy)返回虚部?我试图避免使用 if 语句来检查特征值对象是否复杂,然后仅将其设置为真实组件(如果可能)。

python numpy linear-algebra eigenvalue

6
推荐指数
1
解决办法
2933
查看次数

如何找出对应于矩阵特定特征值的特征向量?

如何找出与特定特征值对应的特征向量?

我有一个随机矩阵(P),其中一个特征值是1.我需要找到对应于特征值1的特征向量.

scipy函数scipy.linalg.eig返回特征值和特征向量的数组.

D, V = scipy.linalg.eig(P)
Run Code Online (Sandbox Code Playgroud)

这里D(值的数组)和V(矢量的数组)都是矢量.

一种方法是在D中进行搜索并在V中提取相应的特征向量.有更简单的方法吗?

python numpy scipy eigenvalue eigenvector

5
推荐指数
2
解决办法
1万
查看次数

在 Python 中绘制相关圆

我一直在做一些几何数据分析(GDA),例如主成分分析(PCA)。我想绘制一个相关圆......这些看起来有点像这样:

1]

基本上,它允许测量变量的特征值/特征向量与数据集的主成分(维度)相关的扩展。

任何人都知道是否有绘制此类数据可视化的python包?

python eigenvalue eigenvector correlation pca

5
推荐指数
2
解决办法
9747
查看次数

python中的任何函数如matlab中的polyeig()吗?

我正在尝试解决 python 中的多项式特征值问题,并且我需要像 matlab 中的 polyeig 这样的函数,是否有任何库能够执行此操作?

我试图解决的问题是这样的

c0+c1*alpha+c2*alpha**2+c3*alpha**3=0 其中 c 是矩阵,alpha 是给定问题的特征值。

python matlab scientific-computing eigenvalue

5
推荐指数
0
解决办法
499
查看次数

python中参数化的厄米矩阵的特征系统

假设我们对依赖于参数 t 的厄密矩阵 h(t) 的特征值和特征向量感兴趣。我的矩阵又大又稀疏,因此需要进行数值处理。

一种简单的方法是在离散化参数值 t_k 处评估矩阵 h(t_k)。是否可以根据“特征向量的特征”对特征向量和特征值进行排序?

让我用下面的简单例子来说明我所说的“特征向量的特征”是什么意思(i 表示虚数单位)。

h(t) = {{1, i t}, {-i t, 1}}

特征值为 1-t 和 1+t,具有相应的特征向量 {-i, 1} 和 {i, 1}。因此,根据“特征向量特征”进行排序,特征值应该在 t = 0 处交叉。然而,大多数特征求解器通过增加特征值来对它们进行排序,将特征向量从负交换为正 t(参见代码和输出图)。

import numpy as np
import scipy.sparse.linalg as sla
import matplotlib.pyplot as plt

def h(t):
    # parametrized hermitian matrix
    return np.array([[1, t*1j], [-t*1j, 1]])


def eigenvalues(t):
    # convert to tuple for np.vectorize to work
    return tuple(sla.eigsh(h(t), k=2, return_eigenvectors=False))

eigenvalues = np.vectorize(eigenvalues)

t = np.linspace(-1, 1, num=200) …
Run Code Online (Sandbox Code Playgroud)

python scipy eigenvalue sparse-matrix lapack

5
推荐指数
0
解决办法
190
查看次数

Tensorflow特征值分解极慢

我在 Tensorflow 中使用特征分解,发现它非常慢。下面的代码显示了 Tensorflow 的速度与 numpy 和 scipy 的比较:

import numpy as np
import scipy as sp
import tensorflow as tf
from time import time

A = np.random.randn(400, 400)
A_tf = tf.constant(A)

cur = time()
d, v = sp.linalg.eig(A)
print(f'sp: {time() - cur:4.2f} s')

cur = time()
d, v = np.linalg.eig(A)
print(f'np: {time() - cur:4.2f} s')

cur = time()
d, v = tf.linalg.eig(A_tf)
print(f'tf: {time() - cur:4.2f} s')
Run Code Online (Sandbox Code Playgroud)

这给出了以下输出:

sp: 0.09 s
np: 0.08 s
tf: 5.04 s
Run Code Online (Sandbox Code Playgroud)

对这里有什么想法吗?

python eigenvalue eigenvector tensorflow

5
推荐指数
1
解决办法
565
查看次数

求解广义特征向量和特征值以获得共同的基础

我正在寻找在 Matlab 中解决广义特征向量和特征值问题。为此,我测试了2种方法。

  1. 如果广义问题表述为:

普遍问题

然后,我们可以在每一边乘以 B^(-1),例如:

其他配方

所以,从理论角度来看,这是一个简单而经典的特征值问题。

最后,在 Matlab 中,我简单地使用A=FISH_sp和进行了操作B=FISH_xc

[Phi, Lambda] = eig(inv(FISH_xc)*FISH_sp);
Run Code Online (Sandbox Code Playgroud)

但是,当我在简单的费舍尔综合之后得到的结果不正确(约束太糟糕,而且还出现了nan值。我不知道为什么我没有得到与下面第二个相同的结果。

  1. 第二种方法来自以下论文

总而言之,所使用的算法在第 7 页进行了描述。我已经遵循了该算法的所有步骤,当我进行 Fisher 综合时,它似乎给出了更好的结果。

这里是感兴趣的部分(抱歉,我认为 Stakoverflow 上没有 Latex):

广义特征向量和特征值的描述

这是我的这个方法的小 Matlab 脚本:

% Diagonalize A = FISH_sp and B = Fish_xc
[V1,D1] = eig(FISH_sp);
[V2,D2] = eig(FISH_xc);

% Applying each  step of algorithm 1 on page 7
phiB_bar = V2*(D2.^(0.5)+1e-10*eye(7))^(-1);
barA = inv(phiB_bar)*FISH_sp*phiB_bar;
[phiA, vA] = eig(barA);
Phi = phiB_bar*phiA;
Run Code Online (Sandbox Code Playgroud)

所以最后,我找到了 phi 特征向量矩阵 (phi) 和 lambda …

matlab linear-algebra eigenvalue eigenvector diagonal

5
推荐指数
1
解决办法
580
查看次数