У меня есть собственная матрица размером 256х256.
Я хочу уменьшить его до 100x100 и сохранить внутренние значения, чтобы значения были от индекса 78,78 до 178,178.
Я хочу сделать это с помощью операции блока, но получаю матрицу с неправильным размером. Блок имеет 178 строк и 178 столбцов вместо 100 строк и столбцов.
Eigen::MatrixXf small = Eigen::MatrixXf::Constant(100, 100, 0.0);
small = matrix.block(78, 78, 178, 178).eval();
cout<<small.rows()<<endl;
cout<<small.cols()<<endl;`
Выходы 178 и 178.
Что я делаю не так?
2 ответа
Согласно документации https://eigen.tuxfamily.org/dox/group__TutorialBlockOperations.html :
matrix.block(i,j,p,q);
Средства
Блок размером (p, q), начиная с (i, j)
Так что вам нужно, в вашем случае p=q=100
, что-то вроде
small = matrix.block(78, 78, 100, 100).eval();
Вы неправильно прочитали документацию.
Третий и четвертый аргументы - это ширина и высота , а не X2 или Y2 .
Итак, просто пройдите 100, 100 вместо этого.
Похожие вопросы
Новые вопросы
c++
C++ — это язык программирования общего назначения. Изначально он разрабатывался как расширение C и имел аналогичный синтаксис, но теперь это совершенно другой язык. Используйте этот тег для вопросов о коде, который будет скомпилирован с помощью компилятора C++. Используйте тег версии для вопросов, связанных с конкретной стандартной версией [C++11], [C++14], [C++17], [C++20] или [C++23]. и т.д.