zuroc 发表于 2013-2-5 01:22:54

稀疏矩阵的存储格式 之 CSR/CSC

R是Row,C是Column

以csr为演示

http://zsp.iteye.com/upload/picture/pic/25643/ade3dc1b-a7d9-3b4b-a5d9-1ac4f617ed01.jpg

I中每一个元素代表一行,其数值代表该行从J中哪个元素开始.J是列号了

空间 2*nnz+n(因为I==行数,J==2*nnz),nnz是非0元素个数

http://www.cs.utk.edu/~dongarra/etemplates/node373.html

然后可以看看下面的代码有什么bug,我还没有高兴看:)但是一定是有bug的...

template <typename T> static void
gf_spmat_get_data(gmm::csc_matrix_ref<const T*, const unsigned int *, const unsigned int *> M,
          getfemint::mexargs_out& out, int which) {
size_type nz = M.jc;
if (which == 0) {
    iarray w = out.pop().create_iarray_h(unsigned(M.nc+1));
    for (unsigned i=0; i < M.nc+1; ++i)
      { w = M.jc + config::base_index(); }
    if (out.remaining()) {
      w = out.pop().create_iarray_h(unsigned(nz));
      for (unsigned i=0; i < nz; ++i)
    { w = M.ir + config::base_index(); }
    }
} else {
    garray<T> w = out.pop().create_array_h(unsigned(nz), T());
    for (unsigned i=0; i < M.nc+1; ++i) { w = M.pr; }
}
}
页: [1]
查看完整版本: 稀疏矩阵的存储格式 之 CSR/CSC