2012-06-22 32 views
1

当我使用Matrix类型的getCols()方法时,我发现了一个问题。 Check this piece:emgu Matrix <float> .getCols

让我们假设orig的大小是[1000,384],numFeat = 50;

private Matrix<float> ComputePCA(Matrix<float> orig, int numFeat) 
    { 
     Matrix<float> avg = new Matrix<float>(1, orig.Cols); 
     Matrix<float> eigval = new Matrix<float>(orig.Cols, 1); 
     Matrix<float> eigvec = new Matrix<float>(orig.Cols, orig.Cols); 
     Matrix<float> featMat = new Matrix<float>(orig.Rows, numFeat); 

     CvInvoke.cvCalcPCA(masterMat, avg, eigval, eigvec, Emgu.CV.CvEnum.PCA_TYPE.CV_PCA_DATA_AS_ROW); 

     Matrix<float> choosenAutovec = new Matrix<float>(orig.Cols, numFeat); 

     choosenAutovec = eigvec.GetCols(0, numFeat - 1); 

     featMat = choosenAutovec.Transpose() * orig.Transpose(); 

     return featMat.Transpose(); 
    } 
eigvec.GetCols我想有大小的可变choosenAutovec [384,50]右后

?但是我得到一个矩阵[384,384],而不是...任何建议只采取前50列?

谢谢。

回答

0

以第一列50,不同之处numFeat不能因为在GetCols不包括所述第二参数的指数递减几乎正确地完成。

至于矩阵大小,调用GetColschoosenAutovec引用同一阵列浮子作为eigvec类似属性的数据属性后。但是,choosenAutovec的索引器的工作方式好像是384乘50矩阵。您可以通过在分配后设置断点来检查它。 featMat大小按照预期为50乘1000。

在以下页面GetCol(其类似于GetCols)由灿明在注释中详细地描述的行为: http://www.emgu.com/bugs/show_bug.cgi?id=19