CSRTensor和COOTensor的定义

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如下:

  • \begin{bmatrix} 0 & 1 & 0 & 0 & 0 & 1 \\ 0 & 0 & 2 & 0 & 0 & 0 \\ 0 & 0 & 0 & 0 & 2 & 0 \end{bmatrix}

  • 先看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行

  • \begin{bmatrix} 0 & 1 & 0 & 0 & 0 & 1 \\ 0 & 0 & 0& 0 & 0 & 0 \\ 0 & 0 & 0 & 0 & 2 & 0 \end{bmatrix}

  • 则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如下:

  • \begin{bmatrix} 0 & 1 & 0 & 0 \\ 0 & 0 & 2& 0 \\ 0 & 0 & 0 & 0 \end{bmatrix}

  • indices中的[0,1]代表第一个元素在第0行第1列,[1,2]同理,其实indices就是一个储存了每个非零点坐标的二维数组

  • values就是每个点的值

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值