Pytorch的矩阵学习

pytorch中,矩阵主要分为以下几类:

密集矩阵Dense Tensor:

        标准的二维张量,存储所有元素(包括零元素)

        也就是常说的邻接矩阵

稀疏矩阵Sparse Tensor:

        含有大量的零元素的矩阵,分为稀疏COO矩阵(COO Format)和稀疏CSR矩阵(CSR Format)

        COO:通过坐标和对应的值表示非零元素。它使用三个数组来表示矩阵的数据:indices:一个二维张量,其中包含矩阵中非零元素的坐标。values:一个一维张量,包含这些非零元素的值。shape:一个表示矩阵形状的元组。

        CSR:通过行指针、列索引和非零值表示稀疏矩阵(PyTorch的支持较少,主要使用COO格式)。

         

        邻接矩阵转稀疏矩阵:pytorch 邻接矩阵转稀疏矩阵 (dense matrix to coo matrix)_pytorch 邻接表转sparsecoo-优快云博客

        如果我们有一个稀疏矩阵,想要转成邻接矩阵,可以使用COO,但是注意,COO只会保留非零元素


# print(adj.shape)    # [2, 306400]

# 改adj形状 稀疏矩阵转邻接矩阵

indices = adj.long()
values = torch.ones(indices.shape[1], device=indices.device)
shape = (input.shape[0], input.shape[0])

# torch.sparse_coo_tensor只能返非零元素的位置和值,不能直接返回稀疏矩阵
# adj_sparse = torch.sparse_coo_tensor(indices, values, shape, dtype=torch.float32)# [512,256]

# 创建一个全零的稠密矩阵
dense_adj = torch.zeros(shape, device=indices.device)
# 将非零元素更新到稠密矩阵
for i in range(indices.shape[1]):
   dense_adj[indices[0, i], indices[1, i]] = values[i]
# 转换成稀疏矩阵
adj_sparse = dense_adj.to_sparse()

# print(adj_sparse.shape) # [3064,3064]

对角矩阵Diagonal Tensor

单位矩阵Identify Matrix

  1. 对角矩阵(Diagonal Tensor):只有主对角线及其上下对角线有非零元素,可以使用torch.diag创建。

  2. 单位矩阵(Identity Matrix):对角线上的元素都是1,其余元素都是0,可以使用torch.eye创建。

待补充

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值