У меня есть собственная матрица размером 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.

Что я делаю не так?

1
Peter111 16 Авг 2019 в 18:55

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();
4
CuriouslyRecurringThoughts 16 Авг 2019 в 16:02

Вы неправильно прочитали документацию.

Третий и четвертый аргументы - это ширина и высота , а не X2 или Y2 .

Итак, просто пройдите 100, 100 вместо этого.

4
Lightness Races in Orbit 16 Авг 2019 в 16:02