Как изменить значения в MatrixXD собственных с помощью блока? - PullRequest
0 голосов
/ 26 апреля 2020

В моем коде я использую массив MatrixXd, используя собственный C ++. Я хочу изменить свою матрицу, как показано ниже

#include <eigen3/Eigen/Dense>
int main(){
   Eigen::MatrixXd m(3,3);
   m << 1,2,3,
       4,5,6,
       7,8,9;
  // fixed-size block expression
  m.block<1,2>(0,0) = 99; // Compiler Error
  //dynamic-size block expression 
  m.block(0,0,1,2) = 99; // Compiler Error


  std::cout<<m<<endl; 
 }

Ожидаемый результат:

 99  99   3
  4   5   6
  7   8   9

1 Ответ

0 голосов
/ 26 апреля 2020

Если m является объектом Matrix, вам нужно написать любой из этих:

 m.block<1,2>(0,0).setConstant(99);
 m.block<1,2>(0,0).array() = 99;

Альтернативно, объявите m как ArrayXXd объект:

Eigen::ArrayXXd m(3,3);
m << 1,2,3,
     4,5,6,
     7,8,9;
m.block<1,2>(0,0) = 99;  
...