0
我对Eigen库有一些问题。虽然我打电话的调整大小功能,当我尝试牛逼访问矩阵中的第二个for循环,我得到的Eigen MatrixX声明失败,虽然调用了调整大小
征断言指数= 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;
}
我可以看到成员m_rows
和Visual Studio调试器矩阵M的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是原因?你打印出行()和列()访问?尝试使用正确的维度初始化矩阵,而不是在构建后调整大小。 –
使用std :: vector作为你的函数的参数,或者gsl :: span,与eigen强项无关:) –