Вы никогда не говорили матрице, какого размера она должна быть. Вы должны изменить размер матрицы перед записью в нее.
Eigen::Matrix<double, Eigen::Dynamic, 1840> matrix;
matrix.resize(batch, 1840);
for (unsigned int b = 0; b < batch; b++)
...
Вторая проблема с вашим кодом состоит в том, что operator<<
не ведет себя как push_back
контейнеров std. Он инициализирует всю (надлежащего размера) матрицу сразу, а не с помощью вызовов NxMxL.
Несоответствующая проблема производительности с кодом заключается в том, что Tensor x
передается по значению, в результате чего создается копия. Вместо этого передайте (постоянную) ссылку:
Eigen::MatrixXd flatten(const Tensor& x)
{ ...