mindspore.CSRTensor

class mindspore.CSRTensor(indptr=None, indices=None, values=None, shape=None, csr_tensor=None)[源代码]

用来表示某一Tensor在给定索引上非零元素的集合,其中行索引由 indptr 表示,列索引由 indices 表示,非零值由 values 表示。

如果 indptr 是[0, 2, 5, 6], indices 是[0, 3, 1, 2, 4, 2], values 是[1., 2., 3., 4., 5., 6.], shape 是(3, 5),那么它对应的稠密Tensor如下:

[[1., 0., 0., 2., 0.],
 [0., 3., 4., 0., 5.],
 [0., 0., 6., 0., 0.]]

indptr 的长度应为 shape[0]+1, 其中的元素应为单调递增或相等的,最大值应等于张量中所有非零元素的总个数; indicesvalues 的长度应等于张量中所有非零元素的总个数。具体地,通过 indptr 拿到每一行非零元素的查询索引,然后根据该行的拿到的查询索引到 indices 中确定该行非零元素所在列,到 values 中确定该行非零元素的取值。前例中, indptr 为[0, 2, 5, 6],表示查询索引[0, 2)为第0行的数据,查询索引[2, 5)为第1行的数据,查询索引[5, 6)为第2行的数据。例如:稠密张量第0行非零元素所在的列位置由 indices 中的第[0, 2)个元素(即[0, 3])给出,实际值由 values 中的第[0, 2)个元素(即[1., 2.])给出;第1行非零元素所在的列位置位置由 indices 中的第[2, 5)个元素(即[1, 2, 4])给出,实际值由 values 中的第[2, 5)个元素(即[3., 4., 5.])给出;第2行非零元素所在的列位置位置由 indices 中的第[5, 6)个元素(即[2])给出,实际值由 values 中的第[5, 6)个元素(即[6.])给出;

CSRTensor 的算术运算包括:加(+)、减(-)、乘(*)、除(/)。详细的算术运算支持请参考 运算符

警告

  • 这是一个实验性API,后续可能修改或删除。

  • 使用PyNative模式,需要添加"export MS_PYNATIVE_CONFIG_STATIC_SHAPE=1"。

  • 如果 indptrindices 的值不合法,行为将没有定义。不合法的值包括当 valuesindices 的长度超出了 indptr 所指定的取值范围,以及当 indices 在同一行中出现重复的列。

参数:
  • indptr (Tensor) - shape为 \((M)\) 的一维整数Tensor,其中M等于 shape[0] + 1 ,表示每行非零元素的在 values 中存储的起止位置。默认值: None 。支持的数据类型为int16,int32和int64。

  • indices (Tensor) - shape为 \((N)\) 的一维整数Tensor,其中N等于非零元素数量,表示每个元素的列索引值。默认值: None 。支持的数据类型为int16, int32和int64。

  • values (Tensor) - Tensor,values的零维长度必须与indices的零维长度相等(values.shape[0] == indices.shape[0])。values用来表示索引对应的数值。默认值: None

  • shape (tuple(int)) - shape为 \((ndims)\) 的整数元组,用来指定稀疏矩阵的稠密shape。shape[0] 表示行数,因此必须和 M - 1 值相等。默认值: None

  • csr_tensor (CSRTensor) - CSRTensor对象,用来初始化新的CSRTensor。values的特征维度需要和csr_tensor的特征维度匹配 \((values.shape[1:] == csr\_tensor.shape[2:])\) 。默认值: None

输出:

CSRTensor,稠密shape取决于传入的 shape ,数据类型由 values 决定。

样例:

>>> import mindspore as ms
>>> from mindspore import Tensor, CSRTensor
>>> # initialize a csr_tensor with indptr, indices, values and shape
>>> indptr = Tensor([0, 1, 2], dtype=ms.int32)
>>> indices = Tensor([0, 1], dtype=ms.int32)
>>> values = Tensor([1, 2], dtype=ms.float32)
>>> shape = (2, 4)
>>> csr_tensor = CSRTensor(indptr, indices, values, shape)
>>> # access a data member of CSRTensor
>>> print(indptr == csr_tensor.indptr)
[ True  True  True]
abs()[源代码]

对所有非零元素取绝对值,并返回新的CSRTensor。

返回:

CSRTensor。

支持平台:

Ascend GPU CPU

样例:

>>> import mindspore as ms
>>> from mindspore import Tensor, CSRTensor
>>> indptr = Tensor([0, 1, 2], dtype=ms.int32)
>>> indices = Tensor([0, 1], dtype=ms.int32)
>>> values = Tensor([-1, -2], dtype=ms.float32)
>>> shape = (2, 4)
>>> csr_tensor = CSRTensor(indptr, indices, values, shape)
>>> print(csr_tensor.abs().values)
[1. 2.]
add(b: CSRTensor, alpha: Tensor, beta: Tensor)[源代码]

两个CSRTensor求和:C = alpha * a + beta * b。

参数:
  • b (CSRTensor) - 稀疏CSRTensor。

  • alpha (Tensor) - 稠密Tensor,shape必须可以广播给self。

  • beta (Tensor) - 稠密Tensor,shape必须可以广播给 b

返回:

CSRTensor,求和。

支持平台:

GPU CPU

样例:

>>> from mindspore import Tensor, CSRTensor
>>> import mindspore.common.dtype as mstype
>>> indptr = Tensor([0, 1, 2], dtype=mstype.int32)
>>> indices = Tensor([0, 1], dtype=mstype.int32)
>>> values_a = Tensor([2, 1], dtype=mstype.float32)
>>> values_b = Tensor([1, 2], dtype=mstype.float32)
>>> dense_shape = (2, 4)
>>> alpha = Tensor(1, mstype.float32)
>>> beta = Tensor(1, mstype.float32)
>>> a = CSRTensor(indptr, indices, values_a, dense_shape)
>>> b = CSRTensor(indptr, indices, values_b, dense_shape)
>>> print(a.add(b, alpha, beta))
CSRTensor(shape=[2, 4], dtype=Float32,
          indptr=Tensor(shape=[3], dtype=Int32, value=[0 1 2]),
          indices=Tensor(shape=[2], dtype=Int32, value=[0 1]),
          values=Tensor(shape=[2], dtype=Float32, value=[ 3.00000000e+00  3.00000000e+00]))
astype(dtype: mstype)[源代码]

返回指定数据类型的CSRTensor。

参数:
  • dtype (Union[mindspore.dtype, numpy.dtype, str]) - 指定数据类型。

返回:

CSRTensor。

支持平台:

Ascend GPU CPU

样例:

>>> import mindspore as ms
>>> from mindspore import Tensor, CSRTensor
>>> indptr = Tensor([0, 1, 2], dtype=ms.int32)
>>> indices = Tensor([0, 1], dtype=ms.int32)
>>> values = Tensor([1, 2], dtype=ms.float32)
>>> shape = (2, 4)
>>> csr_tensor = CSRTensor(indptr, indices, values, shape)
>>> print(csr_tensor.astype(ms.float64).dtype)
Float64
property dtype

返回稀疏矩阵非零元素值数据类型(mindspore.dtype)。

样例:

>>> import mindspore as ms
>>> from mindspore import Tensor, CSRTensor
>>> indptr = Tensor([0, 1, 2], dtype=ms.int32)
>>> indices = Tensor([0, 1], dtype=ms.int32)
>>> values = Tensor([1, 2], dtype=ms.float32)
>>> shape = (2, 4)
>>> csr_tensor = CSRTensor(indptr, indices, values, shape)
>>> print(csr_tensor.dtype)
Float32
property indices

返回CSRTensor的列索引值。

样例:

>>> import mindspore as ms
>>> from mindspore import Tensor, CSRTensor
>>> indptr = Tensor([0, 1, 2], dtype=ms.int32)
>>> indices = Tensor([0, 1], dtype=ms.int32)
>>> values = Tensor([1, 2], dtype=ms.float32)
>>> shape = (2, 4)
>>> csr_tensor = CSRTensor(indptr, indices, values, shape)
>>> print(csr_tensor.indices)
[0 1]
property indptr

返回CSRTensor的行偏移量。

property itemsize

返回每个非零元素所占字节数。

样例:

>>> import mindspore as ms
>>> from mindspore import Tensor, CSRTensor
>>> indptr = Tensor([0, 1, 2], dtype=ms.int32)
>>> indices = Tensor([0, 1], dtype=ms.int32)
>>> values = Tensor([1, 2], dtype=ms.float64)
>>> shape = (2, 4)
>>> csr_tensor = CSRTensor(indptr, indices, values, shape)
>>> print(csr_tensor.itemsize)
8
mm(matrix: Union[Tensor, CSRTensor])[源代码]

返回CSRTensor右乘稀疏矩阵或稠密矩阵的矩阵乘法运算结果。 shape为 [M, N] 的CSRTensor,需要适配shape为 [N, K] 的稠密矩阵或稀疏矩阵,得到结果为 [M, K] 的稠密矩阵或稀疏矩阵。

说明

若右矩阵为Tensor,则仅支持安装了LLVM12.0.1及以上版本的CPU后端或GPU后端。 若右矩阵为CSRTensor,则仅支持GPU后端。

参数:
  • matrix (Tensor or CSRTensor) - shape为 [N,K] 的二维矩阵,其中N等于CSRTensor的列数。

返回:

Tensor 或者 CSRTensor。

支持平台:

GPU CPU

样例:

>>> from mindspore import Tensor, CSRTensor
>>> from mindspore import dtype as mstype
>>> indptr = Tensor([0, 1, 2], dtype=mstype.int32)
>>> indices = Tensor([0, 1], dtype=mstype.int32)
>>> values = Tensor([2, 1], dtype=mstype.float32)
>>> dense_shape = (2, 4)
>>> csr_tensor = CSRTensor(indptr, indices, values, dense_shape)
>>> dense_matrix = Tensor([[1., 2.], [1, 2.], [1, 2.], [1., 2.]], dtype=mstype.float32)
>>> print(csr_tensor.mm(dense_matrix))
[[2. 4.]
[1. 2.]]
mv(dense_vector: Tensor)[源代码]

返回CSRTensor右乘稠密矩阵的矩阵乘法运算结果。 shape为 [M, N] 的CSRTensor,需要适配shape为 [N, 1] 的稠密向量,得到结果为 [M, 1] 的稠密向量。

说明

如果运行后端是CPU,那么仅支持在安装了LLVM12.0.1的机器运行。

参数:
  • dense_vector (Tensor) - shape为 [N,1] 的二维Tensor,其中N等于CSRTensor的列数。

返回:

Tensor。

支持平台:

GPU CPU

样例:

>>> from mindspore import Tensor, CSRTensor
>>> from mindspore import dtype as mstype
>>> indptr = Tensor([0, 1, 2], dtype=mstype.int32)
>>> indices = Tensor([0, 1], dtype=mstype.int32)
>>> values = Tensor([2, 1], dtype=mstype.float32)
>>> dense_shape = (2, 4)
>>> csr_tensor = CSRTensor(indptr, indices, values, dense_shape)
>>> dense = Tensor([[1], [1], [1], [1]], dtype=mstype.float32)
>>> print(csr_tensor.mv(dense))
[[2.]
[1.]]
property ndim

稀疏矩阵的稠密维度。

样例:

>>> import mindspore as ms
>>> from mindspore import Tensor, CSRTensor
>>> indptr = Tensor([0, 1, 2], dtype=ms.int32)
>>> indices = Tensor([0, 1], dtype=ms.int32)
>>> values = Tensor([1, 2], dtype=ms.float32)
>>> shape = (2, 4)
>>> csr_tensor = CSRTensor(indptr, indices, values, shape)
>>> print(csr_tensor.ndim)
2
property shape

返回稀疏矩阵的稠密shape。

样例:

>>> import mindspore as ms
>>> from mindspore import Tensor, CSRTensor
>>> indptr = Tensor([0, 1, 2], dtype=ms.int32)
>>> indices = Tensor([0, 1], dtype=ms.int32)
>>> values = Tensor([1, 2], dtype=ms.float32)
>>> shape = (2, 4)
>>> csr_tensor = CSRTensor(indptr, indices, values, shape)
>>> print(csr_tensor.shape)
(2, 4)
property size

返回稀疏矩阵非零元素值数量。

样例:

>>> import mindspore as ms
>>> from mindspore import Tensor, CSRTensor
>>> indptr = Tensor([0, 1, 2], dtype=ms.int32)
>>> indices = Tensor([0, 1], dtype=ms.int32)
>>> values = Tensor([1, 2], dtype=ms.float32)
>>> shape = (2, 4)
>>> csr_tensor = CSRTensor(indptr, indices, values, shape)
>>> print(csr_tensor.size)
2
sum(axis: int)[源代码]

对CSRTensor的某个轴求和。

说明

如果运行后端是CPU,那么仅支持在安装了LLVM12.0.1的机器运行。

参数:
  • axis (int) - 求和轴。

返回:

Tensor。

支持平台:

GPU CPU

样例:

>>> from mindspore import Tensor, CSRTensor
>>> from mindspore import dtype as mstype
>>> indptr = Tensor([0, 1, 2], dtype=mstype.int32)
>>> indices = Tensor([0, 1], dtype=mstype.int32)
>>> values = Tensor([2, 1], dtype=mstype.float32)
>>> dense_shape = (2, 4)
>>> csr_tensor = CSRTensor(indptr, indices, values, dense_shape)
>>> print(csr_tensor.sum(1))
[[2.]
[1.]]
to_coo()[源代码]

将CSRTensor转换为COOTensor。

说明

如果运行后端是CPU,那么仅支持在安装了LLVM12.0.1的机器运行。

返回:

COOTensor。

支持平台:

GPU CPU

样例:

>>> import mindspore as ms
>>> from mindspore import Tensor, CSRTensor
>>> indptr = Tensor([0, 1, 2], dtype=ms.int32)
>>> indices = Tensor([0, 1], dtype=ms.int32)
>>> values = Tensor([1, 2], dtype=ms.int32)
>>> shape = (2, 4)
>>> csr_tensor = CSRTensor(indptr, indices, values, shape)
>>> print(csr_tensor.to_coo())
COOTensor(shape=[2, 4], dtype=Int32, indices=Tensor(shape=[2, 2], dtype=Int32, value=
[[0 0]
 [1 1]]), values=Tensor(shape=[2], dtype=Int32, value=[1 2]))
to_dense()[源代码]

将CSRTensor转换为稠密Tensor。

返回:

Tensor。

支持平台:

GPU

样例:

>>> import mindspore as ms
>>> from mindspore import Tensor, CSRTensor
>>> indptr = Tensor([0, 1, 2], dtype=ms.int32)
>>> indices = Tensor([0, 1], dtype=ms.int32)
>>> values = Tensor([1, 2], dtype=ms.float32)
>>> shape = (2, 4)
>>> csr_tensor = CSRTensor(indptr, indices, values, shape)
>>> print(csr_tensor.to_dense())
[[1. 0. 0. 0.]
 [0. 2. 0. 0.]]
to_tuple()[源代码]

将CSRTensor的行偏移量,列索引,非零元素,以及shape信息作为tuple返回。

返回:

tuple(Tensor,Tensor, Tensor, tuple(int))。

支持平台:

Ascend GPU CPU

样例:

>>> import mindspore as ms
>>> from mindspore import Tensor, CSRTensor
>>> indptr = Tensor([0, 1, 2], dtype=ms.int32)
>>> indices = Tensor([0, 1], dtype=ms.int32)
>>> values = Tensor([1, 2], dtype=ms.float32)
>>> shape = (2, 4)
>>> csr_tensor = CSRTensor(indptr, indices, values, shape)
>>> print(csr_tensor.to_tuple())
(Tensor(shape=[3], dtype=Int32, value= [0, 1, 2]), Tensor(shape=[2], dtype=Int32, value= [0, 1]),
    Tensor(shape=[2], dtype=Float32, value= [ 1.00000000e+00,  2.00000000e+00]), (2, 4))
property values

返回CSRTensor的非零元素值。

样例:

>>> import mindspore as ms
>>> from mindspore import Tensor, CSRTensor
>>> indptr = Tensor([0, 1, 2], dtype=ms.int32)
>>> indices = Tensor([0, 1], dtype=ms.int32)
>>> values = Tensor([1, 2], dtype=ms.float32)
>>> shape = (2, 4)
>>> csr_tensor = CSRTensor(indptr, indices, values, shape)
>>> print(csr_tensor.values)
[1. 2.]