[PyTroch系列-5]:PyTorch基础 - 稀疏矩阵与其创建方法
Posted 文火冰糖的硅基工坊
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了[PyTroch系列-5]:PyTorch基础 - 稀疏矩阵与其创建方法相关的知识,希望对你有一定的参考价值。
作者主页(文火冰糖的硅基工坊):https://blog.csdn.net/HiWangWenBing
本文网址:https://blog.csdn.net/HiWangWenBing/article/details/119423982
目录
第1部分 稀疏矩阵概述
1.1 概述
稀疏矩阵指矩阵中的大多数元素的值都为0,由于其中非常多的元素都是0,使用常规方法进行存储非常的浪费空间,所以采用另外的方法存储稀疏矩阵。
1.2 COO矩阵的原理
Coordinate(COO)格式是用来描述稀疏矩阵一种方法或数据结构。
Coordinate(COO)格式本身是一个矩阵,用COO矩阵,描述另一个目标稀疏矩阵,原理如下:
这是非常简单的一种方式,使用一个三元组构成的三维COO矩阵来描述任意维度的稀疏矩阵。
三元组分别表示稀疏矩阵中的元素(所在行,所在列,元素值)。
如上图目标矩阵,一共有4*4的目标矩阵,共16个元素,其中4个非零元素:
(0, 0) 位置的值是1。
(0,1) 位置的值是7
(1,1) 位置的值是2
(1,2) 位置的值是8
因此需要3 * 4的COO矩阵,来描述一个4*4的稀疏矩阵。
很显然,通过上述方法,目标稀疏矩阵的每个位置,需要通过3个数组来表示,增加了存储空间。
因此当矩阵规模比较小时,上述的表示是浪费存储空间的。
只有当矩阵的规模比较大,且是稀疏矩阵时,上述的表示才体现出优势。
第2部分 稀疏矩阵创建的代码示例
2.1 环境准备
import numpy as np
import torch
print("Hello World")
print(torch.__version__)
print(torch.cuda.is_available())
2.2 COO矩阵
indices = torch.tensor([[0, 0, 1, 1], [0, 1, 1, 2]])
values = torch.tensor([1, 7, 2, 8], dtype=torch.float32)
a = torch.sparse_coo_tensor(indices=indices, values=values, size=[4, 4])
print(a)
print(a.device)
print(a.layout)
print(a.dtype) #tensor的数据类型
print(a.type) #tensor本身的类型
print(a.type()) #tensor的数据类型
print(a.size())
print(a.shape) #tensor的维度
输出:
tensor(indices=tensor([[0, 0, 1, 1],
[0, 1, 1, 2]]),
values=tensor([1., 7., 2., 8.]),
size=(4, 4), nnz=4, layout=torch.sparse_coo)
cpu
torch.sparse_coo
torch.float32
<built-in method type of Tensor object at 0x000002655E57B980>
torch.sparse.FloatTensor
torch.Size([4, 4])
torch.Size([4, 4])
2.3 目标稀疏矩阵
b = a.to_dense() #把COO矩阵转换成稀疏矩阵
print(b)
print(a.device)
print(a.layout)
print(a.dtype) #tensor的数据类型
print(a.type) #tensor本身的类型
print(a.type()) #tensor的数据类型
print(a.size())
print(a.shape) #tensor的维度
输出:
tensor([[1., 7., 0., 0.],
[0., 2., 8., 0.],
[0., 0., 0., 0.],
[0., 0., 0., 0.]])
cpu
torch.sparse_coo
torch.float32
<built-in method type of Tensor object at 0x000002655E57B980>
torch.sparse.FloatTensor
torch.Size([4, 4])
torch.Size([4, 4])
参考:
Pytorch官方教程:https://www.pytorch123.com/
作者主页(文火冰糖的硅基工坊):https://blog.csdn.net/HiWangWenBing
本文网址:https://blog.csdn.net/HiWangWenBing/article/details/119423982
以上是关于[PyTroch系列-5]:PyTorch基础 - 稀疏矩阵与其创建方法的主要内容,如果未能解决你的问题,请参考以下文章
[PyTroch系列-13]:PyTorch基础 - 张量的操作 - 筛选过滤
[PyTroch系列-7]:PyTorch基础 - 张量Tensor的算术运算
[PyTroch系列-11]:PyTorch基础 - 张量Tensor元素的排序
[PyTroch系列-17]:PyTorch基础 - 张量的索引与切片