eigen matrixx断言失败了,尽管调整了大小
Eigen MatrixX assertion failed though resize is called
我在特征库中有一些问题。当我尝试在第二个循环中访问矩阵时,我会得到
特征主张索引= 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>
相同。
当我声明一个恒定点并使用固定尺寸的矩阵时,一切都很好。
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;
...
}
我在做什么错?
您的表达式 (M.transpose() * M).inverse() * M.transpose() * Y
产生带有2行和1列的矩阵,而A
具有1行和2列。因为A
是固定尺寸,所以调整大小在分配时不会进行。要修复,请在您的表达中添加一个transpose: ((M.transpose() * M).inverse() * M.transpose() * Y).transpose()
相关文章:
- 在提升multi_index容器中,是否定义了"default index"?
- #定义c-预处理器常量..我做错了什么
- 努力将整数转换为链表。不知道我在这里做错了什么
- 为char数组调整zlib-zpipe
- 我在c++代码中生成了一个运行时#3异常
- Ardunio UNO解决了多个重叠的定时器循环
- 为什么我的代码在输出中增加了93天
- 调整大小后指向元素值的指针unordered_map有效?
- C++为什么尽管我调用了void函数,它却不起作用
- 不断收到相同的错误...怎么了?C++
- 首要问题的答案让值班员搞错了
- 在C++中调整向量中的索引
- 我不小心调用了一个没有自己类对象的成员函数.但这是怎么回事呢
- 当我在main中声明了我的2d数组时,为什么我的程序会退出
- 如何判断 std::vector 是否调整了自身大小,以及如何解释指向向量内值的指针不再有效
- eigen matrixx断言失败了,尽管调整了大小
- 尽管应用了已知的防闪烁技术,但我的应用程序在调整大小时略有闪烁
- 矢量实现了许多块和没有调整大小的副本
- 如果超出了堆栈的大小,如何自动调整它?c++
- 我拖放了一个Table View小部件(Qt).如何在填充元素后调整它的大小