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
Я понимаю, что пытаюсь выделить плотный вектор, но это только пример. Я следую инструкциям, указанным в документации броненосца .