首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >热插拔转换不能给出期望的结果。

热插拔转换不能给出期望的结果。
EN

Stack Overflow用户
提问于 2016-12-25 17:32:24
回答 1查看 30关注 0票数 0

我想把霍特林变换应用到给定向量中,让我自己练习,这就是为什么我在matlab中编写了下面的代码

代码语言:javascript
运行
复制
function  [Y covariance_matrix]=hotteling_trasform(X)
% this function take  X1,X2,X3,,Xn as a matrix and  apply hottleing
%transformation  to get  new set of vectors y1, y2,..ym so that covariance
%matrix of matrix consiist by yi vectors are almost diagonal
%% determine size of  given matrix
[m n]=size(X);
%% compute  mean of  columns of given matrix
means=mean(X);
%% substract mean from given matrix
centered=X-repmat(means,m,1);
%% calculate covariance matrix
covariance=(centered'*centered)/(m-1);
%% Apply eigenvector  decomposition
[V,D]=eig(covariance);
%% determine dimension of V
[m1 n1]=size(V);

%% arrange  matrix so that eigenvectors are  as rows,create matrix with size n1 m1
A1=zeros(n1,m1);
for ii=1:n1
    A1(ii,:)=V(:,ii);
end
%% applying hoteling transformation 
Y=A1*centered; %% because centered matrix is original -means
%% calculate covariance matrix
covariance_matrix=cov(Y);

然后我对给定的矩阵进行了测试

代码语言:javascript
运行
复制
A

A =

     4     6    10
     3    10    13
    -2    -6    -8

在运行代码之后

代码语言:javascript
运行
复制
[Y covariance_matrix]=hotteling_trasform(A);
covariance_matrix

covariance_matrix =

    8.9281   22.6780   31.6061
   22.6780   66.5189   89.1969
   31.6061   89.1969  120.8030

这绝对不是对角线矩阵,所以有什么问题吗?提前感谢

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-12-25 19:59:47

在处理行向量而不是列向量时,需要在特征值/特征向量分解中对其进行调整。您需要的不是Y=A1*centered,而是Y=centered*V。然后你就会得到

代码语言:javascript
运行
复制
covariance_matrix =

    0.0000   -0.0000    0.0000
   -0.0000    1.5644   -0.0000
    0.0000   -0.0000  207.1022

因此,你会得到两个非零的成分,这是你可以期望的,从三维空间中的三个点。(它们只能形成一个平面,而不能形成一个体积。)

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/41323179

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档