我想知道有没有什么好方法从 Eigen::SparseMatrix 中提取块/ROI?
更准确地说,我想要提取的是内向量.
我想做的是这样的:
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
and row_j
is 复制了(!!) from spmat
。
然而,显然,这是低效的。
数据(特别是row_i.m_data.m_values
& row_i.m_data.m_indices
) 的内向量是原始数据的连续部分 (spmat.m_data.m_values
& spmat.m_data.m_indices
resp.),所以应该有更聪明的方法。
我也许能够实现新的方法来做到这一点,但这需要我深入挖掘源代码。所以我不想。
任何帮助将不胜感激!
提前致谢。
您可以使用 c++11auto
声明的关键字row_i
and row_j
作为真正的读写表达式,或使用正确的类型:
const auto row_i = spmap.innerVector(i); // C++11 version
const SpMat::InnerVectorReturnType row_i = spmap.innerVector(i); // C++98 version
此外,默认情况下 SparseMatrix 并不是存储在列专业中,因此“内部向量”是一列。如果你想引用行,那么你必须使用行优先的存储布局:
typedef Eigen::SparseMatrix<double,RowMajor> SpMat;
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)