Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/fortran/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 特征垂直堆叠行到矩阵中_C++_Eigen_Eigen3 - Fatal编程技术网

C++ 特征垂直堆叠行到矩阵中

C++ 特征垂直堆叠行到矩阵中,c++,eigen,eigen3,C++,Eigen,Eigen3,我想创建一个大小为2nx9的矩阵,其中N是通过垂直叠加2n1x9矩阵得到的动态值 这是我试着做的 using CoefficientMatrix = Eigen::Matrix<T, Eigen::Dynamic, 9>; using CoefficientRow = Eigen::Matrix<T, 1, 9>; CoefficientMatrix A(2*N, 9); for (int i = 0; i < N; i++) { Coefficient

我想创建一个大小为2nx9的矩阵,其中N是通过垂直叠加2n1x9矩阵得到的动态值

这是我试着做的

using CoefficientMatrix = Eigen::Matrix<T, Eigen::Dynamic, 9>;
using CoefficientRow = Eigen::Matrix<T, 1, 9>;

CoefficientMatrix A(2*N, 9);

for (int i = 0; i < N; i++) {
    CoefficientRow ax;
    CoefficientRow ay;
    // fill in ax and ay
    A << ax, ay;
}
但是,我得到了以下运行时错误

Assertion failed: (((m_row+m_currentBlockRows) == m_xpr.rows() || m_xpr.cols() == 0) && m_col == m_xpr.cols() && "Too few coefficients passed to comma initializer (operator<<)"), function finished, file /usr/local/include/eigen3/Eigen/src/Core/CommaInitializer.h, line 120.
我尝试通过断言语法进行解析,但我不确定这些内部变量名称在我的新代码中指的是什么


谢谢您的帮助。

操作员的过载操作员的过载TLDR:写下如下内容:

CoefficientMatrix A(2*N, 9);

for (int i = 0; i < N; i++) {
    CoefficientRow ax;
    CoefficientRow ay;
    // fill in ax and ay
    A.row(2*i)   = ax;
    A.row(2*i+1) = ay;
}
启用优化后,将生成与上述简单实现相同的代码,因此请选择更容易阅读的代码


注意:从技术上讲,您可以在循环中滥用commainInitializer,方法是在循环外构造它,将其分配给变量,然后在循环内仅使用,运算符。我有意不提供更多关于如何做到这一点的细节…

TLDR:写下如下内容:

CoefficientMatrix A(2*N, 9);

for (int i = 0; i < N; i++) {
    CoefficientRow ax;
    CoefficientRow ay;
    // fill in ax and ay
    A.row(2*i)   = ax;
    A.row(2*i+1) = ay;
}
启用优化后,将生成与上述简单实现相同的代码,因此请选择更容易阅读的代码


注意:从技术上讲,您可以在循环中滥用commainInitializer,方法是在循环外构造它,将其分配给变量,然后在循环内仅使用,运算符。我有意不提供更多关于如何做到这一点的细节…

我喜欢使用中间行的想法。恭喜你跑了10公里。我喜欢使用中排的主意。恭喜你完成了10公里。谢谢,在什么情况下你想使用这个操作符?“SO上的其他帖子建议它用于堆叠,@ru毯fizz查看一些简单的用法示例。为什么它在这里工作?”?在那里,盖尔一次就完全初始化了矩阵。在你的代码中,你有N次电话感谢你澄清了Avi,这是有意义的。谢谢,那么在什么情况下你想使用这个操作符呢?“SO上的其他帖子建议它用于堆叠,@ru毯fizz查看一些简单的用法示例。为什么它在这里工作?”?在那里,盖尔一次就完全初始化了矩阵。在你的代码中,你有N次电话感谢你澄清了Avi,这是有意义的。