稀疏矩阵的存储和乘法操作

Posted wangkundentisy

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了稀疏矩阵的存储和乘法操作相关的知识,希望对你有一定的参考价值。

一 稀疏矩阵的存储

1.三元组顺序表

三元组表示法就是在存储非零元的同时,存储该元素所对应的行下标和列下标。稀疏矩阵中的每一个非零元素由一个三元组(i,j,aij)唯一确定。矩阵中所有非零元素存放在由三元组组成的顺序表中(通常用数组)。所以三元组的逻辑结构如下:

//————稀疏矩阵的三元组表示法————//
#define MAX_SIZE 1500  //表示稀疏矩阵的非零元素的最大个数
class Triple
{
    int i,j;//表示非零元素的行下表和列下标
    int val;//非零元素的值,此处以int类型为例
};
class TSMatrix
{
    Triple data[MAX_SIZE];
    int row_num,col_num,cnt;//稀疏矩阵的行数、列数以及非零元素的个数
};

注意,此处的非零元素的三元组是以行序为主序顺序排列的。

2.行逻辑链接顺序表

行逻辑链接顺序表的实质就是在三元组顺序表的基础上加了一个数组,这个数组用于存储稀疏矩阵中每行的第一个非零元素的在三元组顺序表中的位置(此处一定要理解对,是在三元组顺序表中的位置)。所以其逻辑结构如下:

 

//————稀疏矩阵的行逻辑链接表示法————//
#define MAX_SIZE 1500  //表示稀疏矩阵的非零元素的最大个数
#define MAX_ROW 1500  //表示稀疏矩阵的行数的最大个数
class Triple
{
    int i,j;//表示非零元素的行下表和列下标
    int val;//非零元素的值,此处以int类型为例
};
class RLSMatrix
{
    Triple data[MAX_SIZE]; //非零元三元组表
    int rpos[MAX_ROW];//每行第一个非零元素的位置
    int row_num,col_num,cnt;//稀疏矩阵的行数、列数以及非零元素的个数
};

 

  

 

以上是关于稀疏矩阵的存储和乘法操作的主要内容,如果未能解决你的问题,请参考以下文章

稀疏矩阵与密集矩阵乘法 C++ Tensorflow

行逻辑链接的矩阵乘法

向量矩阵乘法、浮点向量、二进制矩阵

poj 3735 Training little cats 矩阵快速幂+稀疏矩阵乘法优化

稀疏矩阵乘法

一种计算矩阵乘法的快速算法