标签: eigenvalue

什么是在python中找到特征值/向量的最快方法?

目前我正在使用numpy来完成这项工作.但是,因为我正在处理具有数千行/列的矩阵,后来这个数字将达到数万,我想知道是否存在可以更快地执行此类计算的包?

python numpy matrix linear-algebra eigenvalue

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

计算矩阵的特征值有多贵?

计算矩阵的特征值有多贵?

最佳算法的复杂性是什么?

如果我有一个1000 x 1000的矩阵,在实践中需要多长时间?我认为如果矩阵稀疏会有帮助吗?

是否存在特征值计算不会终止的情况?

R,我可以计算特征值,如下面的玩具示例所示:

m<-matrix( c(13,2, 5,4), ncol=2, nrow=2 )
eigen(m, only.values=1)
$values
[1] 14  3
Run Code Online (Sandbox Code Playgroud)

有谁知道它使用什么算法?

是否还有其他(开源)软件包可以计算特征值?

r matrix linear-algebra eigenvalue sparse-matrix

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

计算python中非常大的稀疏矩阵的特征值

我有一个非常大的稀疏矩阵,表示马尔可夫链中的过渡马赛克,即矩阵的每一行的总和等于1,我有兴趣找到第一个特征值及其相应的小于1的向量.我知道特征值在[-1,1]部分中有界,它们都是实数(非复数).
我试图使用python scipy.sparse.eigs函数计算值,但是,函数的一个参数是要估计的特征值/向量的数量,每次我增加要估计的参数数量时,特征值的数量就是精确的一个人也成长了.
不用说,我正在使用which带有值的参数'LR'为了得到k个最大的特征值,k是要估计的值的数量.
有没有人知道如何解决这个问题(找到小于1的第一个特征值及其相应的向量)?

python scipy eigenvalue sparse-matrix eigenvector

20
推荐指数
1
解决办法
1001
查看次数

Numpy转置乘法问题

我试图找到一个矩阵的特征值乘以它的转置,但我不能用numpy做.

testmatrix = numpy.array([[1,2],[3,4],[5,6],[7,8]])
prod = testmatrix * testmatrix.T
print eig(prod)
Run Code Online (Sandbox Code Playgroud)

我希望得到以下产品结果:

5    11    17    23
11    25    39    53
17    39    61    83
23    53    83   113
Run Code Online (Sandbox Code Playgroud)

和特征值:

0.0000
0.0000
0.3929
203.6071
Run Code Online (Sandbox Code Playgroud)

相反,我ValueError: shape mismatch: objects cannot be broadcast to a single shape在乘以testmatrix它的转置时得到了.

这在MatLab中工作(乘法,而不是代码),但我需要在python应用程序中使用它.

有人能告诉我我做错了什么吗?

python numpy scipy eigenvalue

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

计算R中前两个主成分的最快方法是什么?

princomp在R中用来执行PCA.我的数据矩阵很大(10K x 10K,每个值最多4个小数点).在Xeon 2.27 GHz处理器上需要大约3.5小时和~6.5 GB的物理内存.

由于我只想要前两个组件,有没有更快的方法呢?

更新:

除了速度之外,还有一种内存有效的方法吗?

用于计算前两个组件需要大约2小时和~6.3 GB的物理内存svd(,2,).

r eigenvalue eigenvector pca

17
推荐指数
2
解决办法
5790
查看次数

为什么LDA中的特征向量和特征值变为零?

我想在OpenCV中实现快速PLDA(概率线性判别分析).在这个LINK快速PLDA已经实现MatlabPython.PLDA的一部分是LDA.我编写了以下用于在OpenCV中实现LDA的代码:

int LDA_dim = 120;

// Load data

FileStorage fs("newStorageFile.yml", FileStorage::READ);

// Read data

Mat train_data, train_labels;

fs["train_data"] >> train_data;
fs["train_labels"] >> train_labels;

// LDA

if (LDA_dim > 0)
{
    LDA lda(LDA_dim);
    lda.compute(train_data, train_labels);          // compute eigenvectors

    Mat eigenvectors = lda.eigenvectors();
}
Run Code Online (Sandbox Code Playgroud)

我已将上面链接中引入的数据库转换.mat.yml.结果是newStorageFile.yml我上传到了这里.train_data有650行和600列,train_labels有650行和1列.我不知道为什么特征向量和特征值变为零!! PLZ帮我修复此代码.

最好将转换数据的代码.mat带到.yml:

function matlab2opencv( variable, fileName, flag)

[rows cols] = size(variable);

% Beware of Matlab's linear indexing …
Run Code Online (Sandbox Code Playgroud)

c++ opencv probability eigenvalue linear-discriminant

17
推荐指数
1
解决办法
865
查看次数

Python特征值计算比我计算机上的MATLAB运行速度慢得多.为什么?

我想使用Python 2.6.5计算大型矩阵(约1000x1000)的特征值.我一直无法做到这一点.我还没有发现任何其他线程来解决这个问题.

我跑的时候

a = rand(1000,1000);
tic;
for i =1:10
    eig(a);
end
toc;
Run Code Online (Sandbox Code Playgroud)

在MATLAB中大约需要30秒.Python中的类似测试需要216秒.使用RPy通过R运行它并没有明显加快计算速度.Octave的测试耗时93秒.我对速度上的差异感到有点困惑.

我可以在网上找到这样一个问题的唯一例子就是这个,这已经有好几年了.该问题中的海报有一个不同的Python目录结构(我将其归因于帖子的年龄,虽然我可能会弄错),所以我没有足够的信心尝试按照记者发布的说明进行操作.

我的包管理器说我安装了LAPACK,我使用NumPy和SciPy进行Python计算:

from numpy import *
from scipy import *
from numpy.linalg import *
import time

a = randn(1000,1000)
tic = time.clock()
for i in range(0,10):
    eig(a)
toc = time.clock()
print "Elapsed time is ", toc-tic
Run Code Online (Sandbox Code Playgroud)

我是Python的新手,所以我可能做了些傻事.如果我需要提供更多信息,请告诉我.

python matlab numpy eigenvalue

13
推荐指数
2
解决办法
2880
查看次数

Matlab eig是否总是返回排序值?

我在Matlab上使用了一个函数:

[V,D] = eig(C);
Run Code Online (Sandbox Code Playgroud)

我看到V和D总是按升序排序.它是否总是那样,或者我应该在获得VD价值后对它们进行排序?

matlab matrix linear-algebra eigenvalue eigenvector

13
推荐指数
2
解决办法
3万
查看次数

'eig'和'eigs'有什么区别?

我已经搜索过很多但是我找不到任何关于两种方法'eig'和'eigs'如何不同的答案.从它们收到的特征值和特征向量之间有什么区别?

matlab eigenvalue eigenvector

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

除非计算的特征值的数量很大,否则Matlab的eigs不会收敛

我试图用以下运动方程计算阻尼结构的特征值lambda:

(lambda ^ 2*M + lambda*C + K)*x = 0.

其中M,CK是稀疏矩阵.使用Matlab的polyeig函数可以工作,但我想进入更大的系统并利用我的矩阵的稀疏性.我使用状态空间线性化来获得广义特征值问题,如下所示:

(A - lambda*B)*z = 0,

A = [ K,0 ; 0, - M ],

B = [ - C, - M ; - M,0 ],

z = [ x ; lambda*x ]

用Matlab的eigs函数解决这个问题:

lambda = eigs(A,B,10,'sm')
Run Code Online (Sandbox Code Playgroud)

产生以下输出:

lambda =
   1.0e+03 *
  -0.2518 - 1.3138i
  -0.2518 …
Run Code Online (Sandbox Code Playgroud)

math matlab eigenvalue

12
推荐指数
1
解决办法
871
查看次数