【发布时间】:2016-11-24 10:26:47
【问题描述】:
我在使用 Eigen 库时遇到了一些问题。当我尝试在第二个 for 循环中访问矩阵时,我得到了
特征断言索引 = 0 && 索引大小()失败
虽然我在调用矩阵的调整大小函数时出错。
Eigen::Matrix<float, 1, 2> linearRegression(Eigen::Vector2f *p, int pointCount)
{
Eigen::MatrixXf M;
Eigen::Matrix<float, 1, 2> A;
Eigen::MatrixXf Y;
M.resize(pointCount, 2);
Y.resize(pointCount, 1);
for (int i = 0; i < pointCount; i++)
{
M(i, 0) = p[i].x();
M(i, 1) = 1;
Y(i, 0) = p[i].y();
}
A = (M.transpose() * M).inverse() * M.transpose() * Y;
return A;
}
我可以在visual studio调试器中看到矩阵M的成员m_rows和m_cols,i不超过它们。错误直接发生在i = 0。
MatrixXf 应与Matrix<float, Dynamic, Dynamic> 相同。
当我声明一个常量 pointCount 并使用固定大小的矩阵时,一切正常。
Eigen::Matrix<float, 1, 2> linearRegression(Eigen::Vector2f *p, int pointCount)
{
const int pointCount = 30;
...
Eigen::Matrix<float, pointCount, 2> M;
Eigen::Matrix<float, 1, 2> A;
Eigen::Matrix<float, pointCount, 1> Y;
...
}
我做错了什么?
【问题讨论】:
-
可能你的矩阵A是原因?你打印出 rows() 和 cols() 访问吗?尝试用正确的维度初始化矩阵,而不是在构造后调整大小。
-
使用 std::vector 作为函数的参数,或 gsl::span,与 eigen strong 无关 :)