压缩稀疏行(CSR):如何存储空行? [英] Compressed Sparse Row (CSR): How do you store empty rows?
本文介绍了压缩稀疏行(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 2
和MATRIX 3
之间的区别呢?我们是否使用负整数作为间距?
谢谢
推荐答案
查看The Wikipedia page。IA
向量(或您称之为<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屋!
查看全文