Matlab和Python采取的特征向量的符号差异
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了Matlab和Python采取的特征向量的符号差异,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含1646字,纯文字阅读大概需要3分钟。
内容图文
![Matlab和Python采取的特征向量的符号差异](/upload/InfoBanner/zyjiaocheng/683/12302756f37c4a0fa99b18bea35da0de.jpg)
您能否解释一下为什么某些特征向量(2-4)存在符号差异?这种差异是否会影响进一步计算中的进一步计算,例如降维?
Matlab:
N = 5000;
dataA = rand(N,5);
covA = cov(dataA);
%covA = dataA*dataA'/(length(dataA)-1);
covA = covA + eps.*eye(size(covA));
[~,pA] = chol(covA);
assert(pA==0,'A is not possitive definite')
dataB = rand(N,5);
covB = cov(dataB);
%covB = dataB*dataB'/(length(dataB)-1);
covB = covB + eps.*eye(size(covB));
[~,pB] = chol(covB);
assert(pB==0,'B is not possitive definite')
[V,D] = eig(covA, covB);
V =
-0.4241 -1.0891 1.8175 2.4067 -1.3032
1.4445 -1.8960 -1.4118 -0.6514 -2.0075
0.1214 -2.5039 0.3332 -0.1705 2.3609
-2.1235 -0.7007 1.1632 -2.1532 -1.0554
-2.2599 -0.4405 -2.2236 1.2545 0.0760
Python:
from scipy.linalg import eigh
import scipy.io
import numpy as np
cov_mat = scipy.io.loadmat('cov.mat')
covA = cov_mat['covA']
covB = cov_mat['covB']
eigvals, eigvecs = eigh(covA, covB, eigvals_only=False)
np.savetxt('eigvals.txt', eigvals, fmt='%.4f')
np.savetxt('eigvecs.txt', eigvecs, fmt='%.4f')
eigvecs =
0.4241 1.0891 -1.8175 -2.4067 -1.3032
-1.4445 1.8960 1.4118 0.6514 -2.0075
-0.1214 2.5039 -0.3332 0.1705 2.3609
2.1235 0.7007 -1.1632 2.1532 -1.0554
2.2599 0.4405 2.2236 -1.2545 0.0760
解决方法:
它们是相同的特征向量,因为翻转特征向量上的符号不会改变其表示形式-它们将具有相同的特征值.因此不会影响进一步的计算.
为什么它们的计算方式不同?
最有可能的原因是,运行的子例程会根据所操作的矩阵而有所不同,并且不关心它们返回的“符号”是什么,因为特征值没有一个.
一个简单的数学证明:
如果x是具有特征值q的矩阵A的特征向量,则根据定义,我们有Ax = qx.
因此,A(-x)=-(Ax)=-(qx)= q(-x),使得-x是具有相同特征值的特征向量.
内容总结
以上是互联网集市为您收集整理的Matlab和Python采取的特征向量的符号差异全部内容,希望文章能够帮你解决Matlab和Python采取的特征向量的符号差异所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。