java 稀疏矩阵压缩_如何对存储为“压缩稀疏行”的矩阵进行稀疏矩阵索引?

诀窍是通过输出列(它们的行)在下三角形中查找值 . 您可以为每行的数据保留一个索引,因为您按行顺序访问输入的行顺序时的条目 .

与博览会类型

struct CSR { // sometimes implicitly symmetric

std::vector<...> vals;

std::vector cols,rowStart;

};

我们有

// Return the [r0,r1) by [c0,c1) submatrix, never

// using any symmetry it might have.

CSR submatrix(const CSR &sym,int r0,int r1,int c0,int c1) {

const int m=r1-r0,n=c1-c0;

std::vector finger(sym.rowStart.begin()+c0,sym.rowStart.begin()+c1);

CSR ret;

ret.rowStart.reserve(m+1);

ret.rowStart.push_back(0);

for(int r=0,rs=r0;r

// (Strictly) lower triangle:

for(int cs=c0,c=0;cs

for(int &f=finger[c],f1=sym.rowStart[cs+1];f

const int cf=sym.cols[f];

if(cf>rs) break;

if(cf==rs) {

ret.vals.push_back(sym.vals[f]);

ret.cols.push_back(c);

}

}

// Copy the relevant subsequence of the upper triangle:

for(int f=sym.rowStart[rs],f1=sym.rowStart[rs+1];f

const int c=sym.cols[f]-c0;

if(c<0) continue;

if(c>=n) break;

ret.vals.push_back(sym.vals[f]);

ret.cols.push_back(c);

}

ret.rowStart.push_back(ret.vals.size());

}

return ret;

}

对于大型矩阵,可以通过使用二进制搜索来优化上三角形循环以找到 f 的相关范围 .

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值