Вот мой короткий вопрос: каков правильный код для генерации карты для (несортированной) coo-матрицы в Tux Eigen (C ++)?
Следующий код успешно генерирует карту A_map для разреженная матрица формата сжатого хранилища строк (crs / csr), которая хранится в crs_structure A1. (Я использую обозначение метисов. M = строки, n = столбцы, nnz = # ненулевые значения.)
Eigen::Map<Eigen::SparseMatrix< double,Eigen::RowMajor,myInt>> A_map(A1.m,A1.n,A1.nnz,A1.adj,A1.adjncy,A1.values,NULL );
Я использую следующий код при попытке создать карту A_map для формата хранения координат (coo) разреженного матрица, которая хранится в coo_structure A2. ptrI, ptrJ, ptrV - это int64 *, int64 *, double *, задающие координаты строк и столбцов значений в ptrV.
Eigen::Map<Eigen::SparseMatrix< double,Eigen::RowMajor,myInt>> A_map(A2.m,A2.n,A2.nnz,A2.ptrI,A2.ptrJ,A2.ptrV,innerNonZerosPtr);
Мне нужна карта, потому что я хочу сравнить векторное произведение разреженной матрицы Эйгена (matve c) против моего.
В общем, ни один из индексов A не отсортирован. В противном случае формат csr можно было бы создать из формата coo в $ \ cO (nnz) $, чтобы обойти проблему.
Это не вариант здесь, поскольку сортировка индексов требует гораздо больше времени, чем вычисление matve c.
Примечание: я не понял, что означает "innerNonZerosPtr"; Мне не удалось найти его фактическое объяснение в документации Eigen. Возможно, понимание его намерения и целенаправленного использования в моем сценарии могло бы решить мою проблему.
Приветствия, и большое спасибо заранее за любую помощь.