gpt4 book ai didi

c++ - Eigen 稀疏 vector :求最大系数

转载 作者:行者123 更新时间:2023-12-02 10:24:12 26 4
gpt4 key购买 nike

我正在使用Eigen处理稀疏 vector ,因此我需要找到一种有效的方法来计算最大系数(或第n个最大系数)的索引。

我的初始方法使用Eigen::SparseVector::InnerIterator,但是在 vector 仅包含零和负值的情况下,它不会计算正确的值,因为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与 vector 大小的相对大小,您拥有多少个非零值,是否可以修改 SparseVector等等。

特别是,如果 n相对较大,请考虑将 partition分为正负两个元素,然后在正确的一半中使用 std::nth_element

关于c++ - Eigen 稀疏 vector :求最大系数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52828106/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com