2016-11-13 16 views
1

Eigen 3.2のスパース行列では、非ゼロ要素のカウントを返す 'nonZeros'というメソッドがありました。この方法はEigen 3.3ではなくなっているようです。どのように3.3で非ゼロの数を得るのですか?Eigen 3.3のスパース行列nonzero count

答えて

1

まだあります。 Eigen/src/SparseCore/SparseCompressedBase.h行56には1つの定義があります(SparseCompressedBase)。もっとそう

template<typename Derived> 
class SparseCompressedBase 
    : public SparseMatrixBase<Derived> 
{ 
    ... 
    protected: 
    typedef typename Base::IndexVector IndexVector; 
    Eigen::Map<IndexVector> innerNonZeros() { return Eigen::Map<IndexVector>(innerNonZeroPtr(), isCompressed()?0:derived().outerSize()); } 
    const Eigen::Map<const IndexVector> innerNonZeros() const { return Eigen::Map<const IndexVector>(innerNonZeroPtr(), isCompressed()?0:derived().outerSize()); } 

    public: 

    /** \returns the number of non zero coefficients */ 
    inline Index nonZeros() const 
    { 
     if(Derived::IsVectorAtCompileTime && outerIndexPtr()==0) 
     return derived().nonZeros(); 

、迅速なgrepがすべての定義(V3.3.0)を示しています。

$はgrep -rn "インデックス非ゼロ要素()" *
のsrc /コア/ DenseBase.hを: 210:インラインインデックスnonZeros()const {return size(); }
src/SparseCore/AmbiVector.h:39:インデックスnonZeros()const;
src/SparseCore/SparseBlock.h:42:インデックスnonZeros()const
src/SparseCore/SparseBlock.h:436:Index nonZeros()const {return Dynamic; }
src/SparseCore/SparseCompressedBase.h:56:インラインインデックスnonZeros()const
src/SparseCore/SparseMap.h:87:インラインインデックスnonZeros()const {return m_zero_nnz [1]; }
src/SparseCore/SparseTranspose.h:31:インラインインデックスnonZeros()const {return derived()。nestedExpression()。nonZeros(); }
src/SparseCore/SparseVector.h:140:インラインインデックスnonZeros()const {return m_data.size(); }

+0

完了するには、nonZerosが粗い見積もりしか返せないいくつかの式から3.3のnonZeros()が削除されていることは事実です。 – ggael

関連する問題