[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 概述

1.2 COO矩阵的原理

第2部分 稀疏矩阵创建的代码示例

2.1 环境准备

2.2 COO矩阵

2.3 目标稀疏矩阵

参考:


第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基础 - 张量的索引与切片

[PyTroch系列-4]:PyTorch基础 - 张量(Tensor)的创建方法

[PyTroch系列-15]:PyTorch基础 - 张量的操作 - 拆分与分割