我在Matlab上使用了一个函数:
[V,D] = eig(C);
Run Code Online (Sandbox Code Playgroud)
我看到V和D总是按升序排序.它是否总是那样,或者我应该在获得V和D价值后对它们进行排序?
我正在尝试使用PCA对我的数据进行princomp(x)标准化.
数据是<16 x 1036800 double>.这运行我们的内存,除了这是一台新计算机,计算机拥有24GB的RAM用于数据挖掘,这是太过预期.MATLAB甚至列出了内存检查中可用的24GB.
MATLAB在执行PCA时实际上是否内存不足,还是MATLAB没有使用RAM来充分发挥它的潜力?任何信息或想法都会有所帮助.(我可能需要增加虚拟内存,但假设24GB已经足够了.)
我正在使用特征值分解为稀疏数据实现PCA.我知道matlab实现了PCA,但它帮助我理解编写代码时的所有技术细节.我一直在遵循这里的指导,但与内置函数princomp相比,我得到了不同的结果.
任何人都可以看着它并指出我正确的方向.
这是代码:
function [mu, Ev, Val ] = pca(data)
% mu - mean image
% Ev - matrix whose columns are the eigenvectors corresponding to the eigen
% values Val
% Val - eigenvalues
if nargin ~= 1
error ('usage: [mu,E,Values] = pca_q1(data)');
end
mu = mean(data)';
nimages = size(data,2);
for i = 1:nimages
data(:,i) = data(:,i)-mu(i);
end
L = data'*data;
[Ev, Vals] = eig(L);
[Ev,Vals] = sort(Ev,Vals);
% computing eigenvector of the real covariance matrix
Ev …Run Code Online (Sandbox Code Playgroud) 在MATLAB中,当我运行[V,D] = eig(a)对称矩阵的命令时,最大特征值(及其相关向量)位于最后一列.但是,当我使用非对称矩阵运行它时,最大的特征值在第一列中.
我正在尝试计算特征向量中心性,这要求我将计算与最大特征值相关联的特征向量.因此,最大的特征值出现在两个不同的位置这一事实使我很难找到解决方案.
我在Matlab和Numpy中计算特征向量,但得到不同的结果.我的印象是给定矩阵只有一组特征向量,但这两个输出看起来都是有效的.
这是我的matlab代码:
m = [ 1.4675 + 0.0000i 0.1669 + 1.2654i;
0.1669 - 1.2654i 1.3085 + 0.0000i]
[eig_vec,eig_val] = eig(m)
Run Code Online (Sandbox Code Playgroud)
eig_val包含:
eig_val =
0.1092 0
0 2.6668
Run Code Online (Sandbox Code Playgroud)
eig_vec包含:
eig_vec =
0.0896 + 0.6789i 0.0953 + 0.7225i
-0.7288 + 0.0000i 0.6848 + 0.0000i
Run Code Online (Sandbox Code Playgroud)
这是我的python代码:
m = np.array([[1.46753694+0.j, 0.16692111+1.26535838j],
[0.16692111-1.26535838j, 1.30851770+0.j]])
eig_val,eig_vec = linalg.eigh(m)
Run Code Online (Sandbox Code Playgroud)
eig_val包含:
array([ 0.10923247, 2.66682217])
Run Code Online (Sandbox Code Playgroud)
eig_vec包含:
array([[-0.68477170+0.j , -0.72875765+0.j ],
[ 0.09530915-0.72249836j, -0.08955653+0.67889021j]])
Run Code Online (Sandbox Code Playgroud)
任何人都可以解释为什么这些输出是不同的,似乎每个两组不同的特征向量都是彼此的旋转版本.另一套更正确吗?
我的目的是找到矩阵的特征向量.在Matlab中,有一个[V,D] = eig(M)用于得到矩阵的特征向量:[V,D] = eig(M).或者,我使用WolframAlpha网站来仔细检查我的结果.
我们有一个10X10矩阵叫M:
0.736538062307847 -0.638137874226607 -0.409041107160722 -0.221115060391256 -0.947102932298308 0.0307937582853794 1.23891356582639 1.23213871779652 0.763885436104244 -0.805948245321096
-1.00495215920171 -0.563583317483057 -0.250162608745252 0.0837145788064272 -0.201241986127792 -0.0351472158148094 -1.36303599752928 0.00983020375259212 -0.627205458137858 0.415060573134481
0.372470672825535 -0.356014310976260 -0.331871925811400 0.151334279460039 0.0983275066581362 -0.0189726910991071 0.0261595600177302 -0.752014960080128 -0.00643718050231003 0.802097123260581
1.26898635468390 -0.444779390923673 0.524988731629985 0.908008064819586 -1.66569084499144 -0.197045800083481 1.04250295411159 -0.826891197039745 2.22636770820512 0.226979917020922
-0.307384714237346 0.00930402052877782 0.213893752473805 -1.05326116146192 -0.487883985126739 0.0237598951768898 -0.224080566774865 0.153775526014521 -1.93899137944122 -0.300158630162419
7.04441299430365 -1.34338456640793 -0.461083493351887 5.30708311554706 -3.82919170270243 -2.18976040860706 6.38272280044908 2.33331906669527 9.21369926457948 -2.11599193328696
1 0 0 0 …Run Code Online (Sandbox Code Playgroud) matlab ×6
eigenvector ×4
eigenvalue ×3
octave ×2
pca ×2
matrix ×1
memory ×1
numpy ×1
python ×1
wolframalpha ×1