Eigen C ++: Как я могу исправить значения после случайной инициализации матрицы? - PullRequest
0 голосов
/ 03 мая 2019

Похоже, что в пакете Eigen коэффициенты постоянно меняются после случайной инициализации матрицы. Некоторые коды иллюстраций и выходные данные перечислены ниже. Мы ожидаем, что X.transpose () - это транспонирование первого X. Но это транспонирование другой случайной матрицы!

Как я могу исправить эти значения после случайной инициализации матрицы?

#include <iostream>
#include <Eigen/Dense>


using namespace Eigen;
using namespace std;
int main(){
  auto X = MatrixXi::Random(2,2);
  cout << X << endl;
  cout << "---------" << endl;
  cout << X.transpose() << endl;
  cout << "---------" << endl;
  cout << X << endl;
  cout << "---------" << endl;
  return 0;
}

Выход:

-1073725017   548908249
 -791266575   -88798166
---------
  70367106 -603530552
-972714280  384109054
---------
 385036099 -250177384
 933495885   41696341
---------

1 Ответ

6 голосов
/ 03 мая 2019

Не используйте auto с Eigen, если вы не знаете, что делаете . Результатом auto X = MatrixXi::Random(2,2); является выражение, которое создает случайную матрицу при оценке. Он оценивается снова и снова при каждом вызове cout. Вместо этого используйте MatrixXi X = MatrixXi::Random(2,2);.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...