C++ 虽然调用了resize,但特征矩阵xx断言失败

C++ 虽然调用了resize,但特征矩阵xx断言失败,c++,matrix,eigen,C++,Matrix,Eigen,我对Eigen库有一些问题。当我尝试访问第二个for循环中的矩阵时,我得到 特征断言索引=0&&index size()失败 调用矩阵的resize函数时出错 Eigen::Matrix<float, 1, 2> linearRegression(Eigen::Vector2f *p, int pointCount) { Eigen::MatrixXf M; Eigen::Matrix<float, 1, 2> A; Eigen::MatrixXf

我对Eigen库有一些问题。当我尝试访问第二个for循环中的矩阵时,我得到

特征断言索引=0&&index size()失败

调用矩阵的resize函数时出错

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.transpose()*M)。inverse()*M.transpose()*Y
生成一个包含2行1列的矩阵,而
a
包含1行2列。由于
A
是一个固定大小,因此在分配时不会发生大小调整。要修复此问题,请在表达式中添加转置:
((M.transpose()*M).inverse()*M.transpose()*Y).transpose()

您的表达式
(M.transpose()*M).inverse()*M.transpose()*Y
生成一个包含2行和1列的矩阵,而
a
包含1行和2列。由于
A
是一个固定大小,因此在分配时不会发生大小调整。要修复此问题,请在表达式中添加转置:
((M.transpose()*M).inverse()*M.transpose()*Y).transpose()

可能是因为我们的矩阵A?您打印了行()和列()了吗?尝试用正确的维度初始化矩阵,并且在构造后不要调整大小。使用std::vector作为函数的参数,或者使用gsl::span,与eigen tough无关:)可能是因为你的矩阵A?您打印了行()和列()了吗?尝试使用正确的维度初始化矩阵,并且在构造后不要调整其大小。使用std::vector作为函数的参数,或使用gsl::span,与特征值无关:)
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;
    ...
}