Eigen :: Карта <Sparse>для COO-SpMV - PullRequest
0 голосов
/ 24 марта 2020

Вот мой короткий вопрос: каков правильный код для генерации карты для (несортированной) 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. Возможно, понимание его намерения и целенаправленного использования в моем сценарии могло бы решить мою проблему.

Приветствия, и большое спасибо заранее за любую помощь.

1 Ответ

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

Здесь есть пример sparseTutorial

В случае основной строки вектор innerNnz хранит количество ненулевых элементов каждой строки. Если матрица находится в сжатом виде, innerNnz не требуется.

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