特征稀疏向量:求最大系数
Eigen Sparse Vector : Find max coefficient
我正在使用特征向量,我需要找到一种有效的方法来计算最大系数(或第 n 个最大系数(的索引。
我的初始方法使用 Eigen::SparseVector::InnerIterator,但是在仅包含零和负值的向量的情况下,它不会计算正确的值,因为 InnerIterator 只迭代非零值。
如何实现它以考虑零值?
要获取最大的非零元素的索引,可以使用此函数:
Eigen::Index maxRow(Eigen::SparseVector<double> const & v)
{
Eigen::Index nnz = v.nonZeros();
Eigen::Index rowIdx;
double value = Eigen::VectorXd::Map(v.valuePtr(), nnz).maxCoeff(&rowIdx);
// requires special handling if value <= 0.0
return v.innerIndexPtr()[rowIdx];
}
如果value <=0
(和v.nonZeros()<v.size()
(,您可以遍历innerIndexPtr()
,直到找到连续元素之间的间隙(或使用std::lower_bound
编写更复杂的内容(
要获得第 n 个最大的元素,这取决于您的n
相对于向量大小的大小、您有多少个非零、是否可以修改您的SparseVector
等。
特别是,如果n
相对较大,请考虑将元素分为正元素和负元素,然后在正确的一半中使用std::nth_element
。
在内部迭代器的同时迭代索引数组(我认为innerIndices
(。
相关文章:
- 特征命名访问向量段
- 将特征矩阵的向量设置为0
- C++ 中的特征向量计算
- 特征稀疏向量:求最大系数
- 如何将向量断言到特征矩阵
- 具有 2 个分量的数组的特征映射到 3 的向量
- 零四元数和任何向量都不为零的特征积,这是一个错误吗?
- 为什么矩阵加法比特征中的矩阵-向量乘法慢?
- 在其特征向量上投影点云
- 计算数组的特征值/向量,而不是使用特征 3 计算矩阵
- 特征获取索引数组,其中向量中的值为真(不需要循环)
- 特征::向量;在函数中使用 Eigen::Matrix3f 的值初始化向量,大于 4 个条目
- 设置负元素特征稀疏向量C++
- 动态分配特征向量的模因
- 在特征c++中重复向量的最快方法
- 特征中的稀疏矩阵和向量加法广播
- 特征误差:INVALID_MATRIX_PRODUCT乘向量和矩阵
- 特征矩阵向量除法
- 特征向量与法巴德
- 向量特征数组上的向量运算