型号的2D向量的PCA计算

PCA computation on 2D vectors of type double

本文关键字:PCA 计算 向量 2D      更新时间:2023-10-16

我正在尝试在数据集上运行PCA,该数据集将我从文件中存储到2D向量中,如下所示:

std::vector<std::vector<double> > tmpVec;
while(std::getline(file, numStream))
{
    std::istringstream buffer(numStream);
    std::vector<double> line((std::istream_iterator<double>(buffer)),
                         std::istream_iterator<double>());
    tmpVec.push_back(line);
    i++;
}

现在,我需要在此上运行PCA,根据我的理解,我需要将其转换为type cv :: mat。这是如下所示:

cv::Mat dst(row, col, CV_64F, &tmpVec);

和通过我在它上运行pca的速度为:

cv::PCA pca(dst, cv::Mat(), CV_PCA_DATA_AS_ROW, 2);

当我尝试在PCA计算后尝试将其打印出来时,我最终会遇到垃圾值。我只需要弄清楚如何在2D双向量上运行PCA即可。对此的任何帮助或将我指向正确的方向都将是很棒的。预先感谢。

this:

cv::PCA pca(dst, cv::Mat(), CV_PCA_DATA_AS_ROW, 2);

期望带有连续数据作为输入的CV ::垫子,而std::vector<std::vector<double> > tmpVec;

不满足。

尝试:

cv::Mat tmp;
while(std::getline(file, numStream))
{
    ...
    cv::Mat m = cv::Mat(line).t();  // we need a row-vec
    tmp.push_back(m);
}
cv::PCA pca(tmp, cv::Mat(), CV_PCA_DATA_AS_ROW, 2);