SLISC 的 Mcoo 矩阵类

                     

贡献者: addis

  • 本文处于草稿阶段。
预备知识 SLISC 的密矩阵类

   当一个矩阵对象中有大量 0 元的时候,用密矩阵数据结构会浪费内存和计算量。COO 是一种常用的稀疏矩阵,它的数据结构是把所有的非零元存放在一个矢量中,并用另外两个矢量分别记录这些非零元的行标和列标。

   在小时百科的 SLISC 库中,我们根据这种数据结构定义了 McooDoub, McooComp 等矩阵类,它和密矩阵一样继承一个 Vbase 类来储存非零矩阵元,另外 m_N0, m_N1 用于储存矩阵尺寸,m_Nnz 储存非零元的长度,该长度未必是 Vbase 的长度,后者通过 reserve(Long_I) 成员函数来调整尺寸。声明如下:

class McooDoub : public VbaseDoub
{
private:
    typedef VbaseDoub Base;
    using Base::m_p;
    using Base::m_N;
    Long m_N0, m_N1, m_Nnz;
    VecLong m_row, m_col;
public:
    using Base::p;
    McooDoub(): m_N0(0), m_N1(0), m_Nnz(0) {};
    McooDoub(Long_I N0, Long_I N1);
    McooDoub(Long_I N0, Long_I N1, Long_I Ncap);
    Long *row_p();
    const Long *row_p() const;
    Long *col_p();
    const Long *col_p() const;
    void push(Doub_I s, Long_I i, Long_I j);
    void set(Doub_I s, Long_I i, Long_I j);
    Long n0() const;
    Long n1() const;
    Long size() const;
    Long nnz() const;
    Long capacity() const;
    Long find(Long_I i, Long_I j) const;
    Doub &ref(Long_I i, Long_I j);
    Doub operator()(Long_I i, Long_I j) const;
    Doub &operator[](Long_I ind);
    Doub operator[](Long_I ind) const;
    Long row(Long_I ind) const;
    Long col(Long_I ind) const;
    void trim(Long_I Nnz);
    void resize(Long_I N);
    void reserve(Long_I N);
    void reshape(Long_I N0, Long_I N1);
};


致读者: 小时百科一直以来坚持所有内容免费无广告,这导致我们处于严重的亏损状态。 长此以往很可能会最终导致我们不得不选择大量广告以及内容付费等。 因此,我们请求广大读者热心打赏 ,使网站得以健康发展。 如果看到这条信息的每位读者能慷慨打赏 20 元,我们一周就能脱离亏损, 并在接下来的一年里向所有读者继续免费提供优质内容。 但遗憾的是只有不到 1% 的读者愿意捐款, 他们的付出帮助了 99% 的读者免费获取知识, 我们在此表示感谢。

                     

友情链接: 超理论坛 | ©小时科技 保留一切权利