pytorch每日一学13(torch.spares_coo_tensor())创建稀疏矩阵

第13个方法

torch.spares_coo_tensor(indices, values, siez=None,*, dtype=None, requires_grad=False)->Tensor
  • 此方法的意思是创建一个Coordinate(COO) 格式的稀疏矩阵,返回值也就h是一个tensor
  • 稀疏矩阵指矩阵中的大多数元素的值都为0,由于其中非常多的元素都是0,使用常规方法进行存储非常的浪费空间,所以采用另外的方法存储稀疏矩阵。

Coordinate(COO)格式的稀疏矩阵

pytorch每日一学13(torch.spares_coo_tensor())创建稀疏矩阵_第1张图片

  • 这是非常简单的一种方式,使用一个三元组来表示矩阵中的一个非0数,三元组分别表示元素(所在行,所在列,元素值),也就是上图中每一个竖的三元组就是表示了一个非零数,其余值都为0,这样就存储了一个稀疏矩阵。

  知道了COO矩阵的存储思想那么此方法就很好理解了,构造这样个矩阵需要知道所有非零数所在的行、所在的列、非零元素的值和矩阵的大小这四个值,所以此方法的参数就大概是这几个。

  • indices:此参数是指定非零元素所在的位置,也就是行和列,所以此参数应该是一个二维的数组,当然它可以是很多格式(ist, tuple, NumPy ndarray, scalar, and other types. )第一维指定了所有非零数所在的行数,第二维指定了所有非零元素所在的列数。例如indices=[[1, 4, 6], [3, 6, 7]]表示我们稀疏矩阵中(1, 3),(4, 6), (6, 7)几个位置是非零的数所在的位置。
  • values:此参数指定了非零元素的值,所以此矩阵长度应该和上面的indices一样长也可以是很多格式(list, tuple, NumPy ndarray, scalar, and other types.)。例如``values=[1, 4, 5]表示上面的三个位置非零数分别为1, 4, 5。
  • size:指定了稀疏矩阵的大小,例如size=[10, 10]表示矩阵大小为 10 × 10 10\times 10 10×10,此大小最小应该足以覆盖上面非零元素所在的位置,如果不给定此值,那么默认是生成足以覆盖所有非零值的最小矩阵大小。
  • dtype:指定返回tensor中数据的类型,如果不指定,那么采取values中数据的类型。
  • device:指定创建的tensor在cpu还是cuda上。
  • requires_grad:指定创建的tensor需不需要梯度信息,默认为False

实例如下所示:

import torch

indices = torch.tensor([[4, 2, 1], [2, 0, 2]])
values = torch.tensor([3, 4, 5], dtype=torch.float32)
x = torch.sparse_coo_tensor(indices=indices, values=values, size=[5, 5])
x


pytorch每日一学13(torch.spares_coo_tensor())创建稀疏矩阵_第2张图片

你可能感兴趣的:(pytorch每日一学,python,pytorch,机器学习,神经网络)