随机(只读)访问 Eigen::SparseVector 的元素
random (read only) access to elements of Eigen::SparseVector
考虑以下愚蠢的代码片段
typedef Eigen::SparseVector<std::complex<double>, Eigen::ColMajor,long long> Vector;
Vector V = CreateData();
for(i=0;i<V.size(),++i)
{
DoSomething( Vector.coeffRef(i));
}
我有兴趣(出于某种目的)访问(比方说)稀疏向量 V
的每个元素,并且当然期望在访问未初始化的条目时返回零。
我惊讶地发现,在访问非 existing\initialized 条目时,此条目 在读取 时创建,正确值为零当然可以,但是为什么呢???
我绝对对这种行为不感兴趣。我想要得到的只是在访问非初始化条目以进行读取时返回零,否则转换为完整矩阵会更快。
.coeffRef
是否有不会分配新条目的替代方法。
使用 coeff()
方法代替 coeffRef()
方法。它正是你想要的。另一方面,coeffRef()
returns 是读写访问的引用,因此该元素必须存在。
考虑以下愚蠢的代码片段
typedef Eigen::SparseVector<std::complex<double>, Eigen::ColMajor,long long> Vector;
Vector V = CreateData();
for(i=0;i<V.size(),++i)
{
DoSomething( Vector.coeffRef(i));
}
我有兴趣(出于某种目的)访问(比方说)稀疏向量 V
的每个元素,并且当然期望在访问未初始化的条目时返回零。
我惊讶地发现,在访问非 existing\initialized 条目时,此条目 在读取 时创建,正确值为零当然可以,但是为什么呢???
我绝对对这种行为不感兴趣。我想要得到的只是在访问非初始化条目以进行读取时返回零,否则转换为完整矩阵会更快。
.coeffRef
是否有不会分配新条目的替代方法。
使用 coeff()
方法代替 coeffRef()
方法。它正是你想要的。另一方面,coeffRef()
returns 是读写访问的引用,因此该元素必须存在。