MindSpore学习笔记
部分内容引用了官方文档
CSR
(Compressed Sparse Row)稀疏张量
用来表示某一Tensor在给定索引上非零元素的集合,其中行索引由 indptr 表示,列索引由 indices 表示,非零值由 values 表示。
-
indptr (Tensor) - shape为 (𝑀) 的一维整数Tensor,其中M等于 shape[0] + 1 ,表示每行非零元素的在 values 中存储的起止位置。默认值:
None
。支持的数据类型为int16,int32和int64。 -
indices (Tensor) - shape为 (𝑁) 的一维整数Tensor,其中N等于非零元素数量,表示每个元素的列索引值。默认值:
None
。支持的数据类型为int16, int32和int64。 -
values (Tensor) - Tensor,values的零维长度必须与indices的零维长度相等(values.shape[0] == indices.shape[0])。values用来表示索引对应的数值。默认值:
None
。 -
shape (tuple(int)) - shape为 (𝑛𝑑𝑖𝑚𝑠) 的整数元组,用来指定稀疏矩阵的稠密shape。shape[0] 表示行数,因此必须和 M - 1 值相等。默认值:
None
。 -
csr_tensor (CSRTensor) - CSRTensor对象,用来初始化新的CSRTensor。values的特征维度需要和csr_tensor的特征维度匹配 (𝑣𝑎𝑙𝑢𝑒𝑠.𝑠ℎ𝑎𝑝𝑒[1:]==𝑐𝑠𝑟_𝑡𝑒𝑛𝑠𝑜𝑟.𝑠ℎ𝑎𝑝𝑒[2:]) 。默认值:
None
。 -
如果 indptr 是[0, 2, 3, 4], indices 是[1.,5., 2.,4.], values 是[1.,1., 2.,2.], shape 是(3, 6),那么它对应的稠密Tensor如下:
-
先看indptr : [0, 2, 3, 4],从左至右每两个相邻的元素组成一个前闭后开的区间,即
-
[0,2) [2,3) [3,4) 这3个区间表示的是这个三行的Tensor每行的非零元素的索引,对应values的下标,也就是说values中的元素是按照一行一行的顺序存储的
-
indices[1,5,2,4]代表每一个非零元素的列数,与indptr组合就能得到在系数矩阵中的位置,我们得到了(0,1) (0,5) (1.2) (3,4)
-
values则对应了值,最终就是我们的目标矩阵
-
如果某行没有元素比如上述矩阵如果去掉第1行
-
则indptr写作[0,2,2,3] 第1行[2,2)表示values中没有元素给第1行,也就代表了没有元素,实际上顺序增长的indptr的内容的最后一个元素(如本例中0 2 2 3中的3)代表了该稀疏矩阵有多少个非零元素。
-
COO
(Coordinate Format)稀疏张量 - 用来表示某一Tensor在给定索引上非零元素的集合,其中索引(indices)指示了每一个非零元素的位置。
-
indices (Tensor) - shape为 (𝑁,𝑛𝑑𝑖𝑚𝑠) 的二维整数Tensor,其中N和ndims分别表示稀疏Tensor中 values 的数量和COOTensor维度的数量。目前 ndims 只能为2。请确保indices的值在所给shape范围内。支持的数据类型为int16, int32和int64。默认值:
None
。 -
values (Tensor) - shape为 (𝑁) 的一维Tensor,用来给 indices 中的每个元素提供数值。默认值:
None
。 -
shape (tuple(int)) - shape为 (𝑛𝑑𝑖𝑚𝑠) 的整数元组,用来指定稀疏矩阵的稠密shape。默认值:
None
。 -
coo_tensor (COOTensor) - COOTensor对象,用来初始化新的COOTensor。默认值:
None
。 -
这个相对直观一些
-
如果 indices 是[[0, 1], [1, 2]], values 是[1, 2], shape 是(3, 4),那么它对应的稠密Tensor如下:
-
indices中的[0,1]代表第一个元素在第0行第1列,[1,2]同理,其实indices就是一个储存了每个非零点坐标的二维数组
-
values就是每个点的值