稀疏矩阵及其压缩方法简述
作者:互联网
稀疏矩阵:
在矩阵中,若数值为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