压缩稀疏行(CSR):如何存储空行? [英] Compressed Sparse Row (CSR): How do you store empty rows?

查看:0
本文介绍了压缩稀疏行(CSR):如何存储空行?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

如何在CSR中表示空行?

假设我们有以下矩阵:

* MATRIX 1 *
a 0 0
0 b 0
0 0 c

val = [ a b c ]
col = [ 0 1 2 ]
row = [ 0 1 2 ] <- makes sense!

—————————————————————   

* MATRIX 2 *
a b c
0 0 0
0 0 0

val = [ a b c ]
col = [ 0 1 2 ]
row = [ 0 ] <— makes sense…? but how about…

—————————————————————

* MATRIX 3 *
0 0 0
a b c
0 0 0

val = [ a b c ]
col = [ 0 1 2 ]
row = [ 0 ] <— wait… how do we differentiate between MATRIX 2 and MATRIX 3?

MATRIX 1是直观的,但是我们如何表示MATRIX 2MATRIX 3之间的区别呢?我们是否使用负整数作为间距?

谢谢

推荐答案

查看The Wikipedia pageIA向量(或您称之为<2-3]>行)定义为:

数组IA的长度为m+1。它由以下递归定义定义:

  • IA[0]=0
  • IA[i]=IA[i−1]+(原始矩阵第(i−1)行的非零元素数)
  • 因此,IA的前m个元素将索引存储到M的每行中的第一个非零元素的A中,而最后的元素IA[m]存储A中的元素的数目Nnz,其也可以被认为是恰好在矩阵M的末尾之后的幻象行的第一个元素在A中的索引。从元素A[IA[i]]到A[IA[i+1]−1](包括两端)读取原始矩阵的第i行的值,即从一行的开始到下一行开始之前的最后一个索引。

因此,在矩阵1中:

row = [0 1 2 3]

在矩阵2中:

row = [0 3 3 3]

在矩阵3中

row = [0 0 3 3]

这篇关于压缩稀疏行(CSR):如何存储空行?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆