Проблемы с инициализацией разреженной матрицы Armadillo - PullRequest
1 голос
/ 10 марта 2020

1. Я пытаюсь инициализировать разреженную матрицу с помощью Armadillo (на C ++), но когда я запускаю код

arma::umat locs;
arma::vec vals;


locs << 0 << 0 << arma::endr;
locs << 0 << 1 << arma::endr;
locs << 0 << 2 << arma::endr;

vals << 1.0;
vals << 2.0;
vals << 3.0;

std::cout << "locs =\n";
std::cout << locs;
std::cout << "vals =\n";
std::cout << vals;

матрица locs и vals vector сохраняет только последний элемент, прочитанный из файла. Таким образом, вывод будет

locs =
        0        2
vals =
   3.0000

Вместо этого, когда я запускаю этот код

arma::umat locs;
arma::vec vals;

locs << 0 << 0 << arma::endr
     << 0 << 1 << arma::endr
     << 0 << 2 << arma::endr;

vals << 1.0
     << 2.0
     << 3.0;

std::cout << "locs =\n";
std::cout << locs;
std::cout << "vals =\n";
std::cout << vals;

, я получаю

locs =
        0        0
        0        1
        0        2
vals =
   1.0000
   2.0000
   3.0000

, и это правильно. Но как я могу использовать его для чтения значений из файла?

2. [решено, см. Комментарии] Более того, когда я звоню (в обоих предыдущих примерах)

arma::sp_mat X(locs, vals);

Я получаю следующую ошибку

error: SpMat::SpMat(): locations matrix must have two rows
terminate called after throwing an instance of 'std::logic_error'
  what():  SpMat::SpMat(): locations matrix must have two rows

Я понимаю, что пытаюсь выделить плотный вектор, но это только пример. Я следую инструкциям, указанным в документации броненосца .

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