对 double 类型的二维向量进行 PCA 计算
PCA computation on 2D vectors of type double
我正在尝试 运行 数据集上的 PCA,我已将其从文件存储到二维向量中,如下所示:
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,根据我的理解,我需要将其转换为类型 cv::Mat。这是按如下方式完成的:
cv::Mat dst(row, col, CV_64F, &tmpVec);
然后我 运行 主成分分析为:
cv::PCA pca(dst, cv::Mat(), CV_PCA_DATA_AS_ROW, 2);
当我尝试在 PCA 计算后在屏幕上打印出来时,我得到了垃圾值。
我只需要弄清楚如何 运行 在二维双向量上进行主成分分析。
对此有任何帮助或为我指明正确的方向都会很棒。
提前致谢。
这个:
cv::PCA pca(dst, cv::Mat(), CV_PCA_DATA_AS_ROW, 2);
期望cv::Mat以连续数据作为输入,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);
我正在尝试 运行 数据集上的 PCA,我已将其从文件存储到二维向量中,如下所示:
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,根据我的理解,我需要将其转换为类型 cv::Mat。这是按如下方式完成的:
cv::Mat dst(row, col, CV_64F, &tmpVec);
然后我 运行 主成分分析为:
cv::PCA pca(dst, cv::Mat(), CV_PCA_DATA_AS_ROW, 2);
当我尝试在 PCA 计算后在屏幕上打印出来时,我得到了垃圾值。 我只需要弄清楚如何 运行 在二维双向量上进行主成分分析。 对此有任何帮助或为我指明正确的方向都会很棒。 提前致谢。
这个:
cv::PCA pca(dst, cv::Mat(), CV_PCA_DATA_AS_ROW, 2);
期望cv::Mat以连续数据作为输入,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);