作者主页(文火冰糖的硅基工坊):https://blog.csdn.net/HiWangWenBing
本文网址:https://blog.csdn.net/HiWangWenBing/article/details/119423982
目录
第1部分 稀疏矩阵概述
1.1 概述
1.2 COO矩阵的原理
第2部分 稀疏矩阵创建的代码示例
2.1 环境准备
2.2 COO矩阵
2.3 目标稀疏矩阵
参考:
稀疏矩阵指矩阵中的大多数元素的值都为0,由于其中非常多的元素都是0,使用常规方法进行存储非常的浪费空间,所以采用另外的方法存储稀疏矩阵。
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个数组来表示,增加了存储空间。
因此当矩阵规模比较小时,上述的表示是浪费存储空间的。
只有当矩阵的规模比较大,且是稀疏矩阵时,上述的表示才体现出优势。
import numpy as np
import torch
print("Hello World")
print(torch.__version__)
print(torch.cuda.is_available())
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
torch.sparse.FloatTensor
torch.Size([4, 4])
torch.Size([4, 4])
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
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