Интересно, есть ли хороший способ извлечь блоки/ROI с Eigen :: SparseMatrix? Точнее, то, что я хочу извлечь, это Внутренние векторы.Извлечение блоков/ROI от Eigen :: SparseMatrix без копирования
То, что я хочу сделать, это как:
typedef Eigen::SparseMatrix<double,Eigen::RowMajor> SpMat;
// Prepare some sparse matrix
SpMat spmat;
// Extract lines from it
const SpMat& row_i = spmat.innerVector(i);
const SpMat& row_j = spmat.innerVector(j);
// Some calculation with row_i and row_j...
Как я тестировал, данные row_i
и row_j
является скопирована (!!) из spmat
. Однако, очевидно, это неэффективно. Данные (например, row_i.m_data.m_values
)) внутренних векторов является непрерывной частью исходных данных (spmat.m_data.m_values
& spmat.m_data.m_indices
соответственно), поэтому должен быть более умный способ.
Возможно, у меня будет возможность реализовать новый метод для этого, но это требует от меня жесткого поиска исходного кода. Поэтому я не хочу.
Любая помощь будет благодарна! Спасибо заранее.
Он работает так, как я ожидал! Thxs :) А также спасибо за указание на колонку/строку-майор. Я изменил свой вопрос. –