Я нашел проблему, когда использую метод getCols() типа Matrix. Проверьте эту кусочек кода:emgu Matrix <float> .getCols
допустим, что размер оригинала [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 колос?
Спасибо.