ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

稀疏矩阵及其压缩方法简述

2022-09-12 11:00:38  阅读:192  来源: 互联网

标签:int 元素 矩阵 稀疏 简述 gameMartix row


稀疏矩阵:

  在矩阵中,若数值为0的元素远远多于非0元素的数目,并且非0元素分布没有规律,则该矩阵为稀疏矩阵;

与之相反,若非0元素数目占大多数,则称该矩阵为稠密矩阵。

稀疏矩阵的应用

  稀疏矩阵应用非常广泛,如在机器学习领域,稀疏矩阵可以应用如下场景:

    1.用户是否看过电影库中的所有电影;

    2.用户是否购买了产品目录中的产品;

    3.歌曲目录中每首歌曲的收听次数

稀疏矩阵的表示方法

  Coordinate

    Coordinate是一种坐标形式的稀疏矩阵,使用三个数组,即values,rows,columns保存非0元素的信息。这三个数组长度相同。

    1.rows:数据所处的行

    2.values:实数或复数数据,包括矩阵中非0的元素,顺序任意

    3.数据所处的列

  coo存储的主要优点是灵活,简单,仅存储非0元素及每个非0元素的坐标。但是,coo不支持元素的存取和增删。

下面通过代码来初始化一个稀疏矩阵;

 

 那么假设一个数据元素的内存空间占一个单位,那该10*10的矩阵就占据100个单位!!!!、

接下来将用coo来表示上图中的稀疏矩阵

首先从第0行数据开始处理,从第0列开始遍历直到第9列,并把非0数据记录下来;在第0行第1列找到数据,用coo记录下来;

同样,第二行,第三行,,,,,第n行,同样按照上述方法进行遍历计算。

案例如下:将实现把一个稀疏矩阵通过coo方法保存下来!

public class demo1 {
    public static void main(String[] args){
       MatrixUtil matrixUtil = new MatrixUtil();
       int rowNum = 15;
       int colNum = 15;
       int[][] gameMartix = new int[rowNum][colNum];
       gameMartix[6][5] = 1;
       gameMartix[6][8] = 2;
       gameMartix[5][7] = 1;
       gameMartix[7][7] = 1;
       gameMartix[8][6] = 2;
       gameMartix[8][7] = 1;
       gameMartix[8][8] = 1;
       gameMartix[9][8] = 2;

       matrixUtil.printMartix(gameMartix);
       int[][] cooMartixCOO = matrixUtil.MatrixToCOO(gameMartix);
       matrixUtil.printMartix(cooMartixCOO);

    }

}
class MatrixUtil{
    public static int[][] MatrixToCOO(int[][] matrix){
        int num = 0;
        for(int row = 0;row < matrix.length;row++){
            for(int colum = 0;colum < matrix[row].length;colum++){
                if(matrix[row][colum] != 0){
                    num++;
                }
            }
        }
        System.out.println("稀疏矩阵的非零元素个数为:" + num);
        int[][] cooMartix = new int[3][num];
        int cooNum = 0;
        for(int row = 0; row<matrix.length;row++){
            for(int colum = 0;colum < matrix[row].length;colum++){
                if(matrix[row][colum] != 0){

                    cooMartix[0][cooNum] = row;
                    cooMartix[1][cooNum] = colum;
                    cooMartix[2][cooNum] = matrix[row][colum];
                    cooNum++;
                }
            }
        }
        System.out.println("放入COO的非零元素个数为:" + cooNum);
        return cooMartix;
    }
    public static void printMartix(int[][] martix){
        for(int row = 0;row < martix.length;row++){
            for(int colum = 0; colum < martix[row].length;colum++){

                System.out.print(martix[row][colum] + " ");


            }
            System.out.println("");
        }
    }

}

运行结果如下:

 

Over!!!!

标签:int,元素,矩阵,稀疏,简述,gameMartix,row
来源: https://www.cnblogs.com/99kol/p/16685699.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有