稀疏矩阵(第一篇)

数据结构与算法之稀疏矩阵第一篇

介绍

现在的我是研究生二年级下学期,即将迈入校园招聘的门槛。

最近论文的仿真结果出来了,我终于可以腾出手来,学习找工作的事情了。我相信只要花时间,花功夫,一定会成为一名好的程序员的。以我现在的这种程度,我觉得远远没有达到和人家拼天赋的程度,只要我现在你好好的将知识吸收了,代码敲好了,以后才有能力做一些拼天赋的东西。

加油吧,这是我这一个专栏的第一篇文章,所有的代码均为我的手敲代码。将我的代码和仿真结果都会奉上。

java源代码

package Package01;

public class SparseArray {
    public static void main(String[] args) {
        //1.创建一个原始的二维数组
        //2. 1用来表示黑子,2表示蓝字,0表示没有棋子

        int[][] chessArr1 = new int[11][11];
        chessArr1[1][2] = 1;
        chessArr1[2][3] = 1;

        //输出原始的数组
//        System.out.println("1.利用for循环输出原始矩阵chessArr1:");
        for(int i=0; i< chessArr1.length; i++){
            for(int j=0; j<chessArr1[i].length; j++){
                System.out.print("\t" + chessArr1[i][j]);
            }
            System.out.println();
        }
//
//        System.out.println("+++++++++++++++++++++++++++++++++++++++++++++");
//        System.out.println("2.利用增强for循环输出矩阵chessArr1:");
//        for(int[] cow:chessArr1){
//            for(int data:cow){
//                System.out.print("\t" + data);
//            }
//            System.out.println();
//        }



        //3.先遍历二维数组,看一下有几个有效数据,得到非零数据的个数。sun
        int sum = 0;
        int cow_Arr1 = 0;
        int ran_Arr1 = 0;
        for(int[] cow:chessArr1){
            cow_Arr1++;
            ran_Arr1 = 0;           //没有这一句的话,将会每一次都执行,导致11*11的结果;有这一句的话,将会
            for(int data:cow){
                ran_Arr1++;
                if(data!=0){
                  sum++;
                }
            }
        }
        System.out.println();
//        System.out.println("不为零的个数sum:\t" + sum);     //不仅可以有四个空格功能,还可以和下一列进行对齐的功能
//        System.out.println("行数cow_Arr1:\t" + cow_Arr1);
//        System.out.println("列数ran_Arr1:\t" + ran_Arr1);




        //4.创建稀疏数组,将数组存放在稀疏矩阵里面
        int sparseArr1[][] = new int[sum+1][3];
        sparseArr1[0][0] = ran_Arr1;
        sparseArr1[0][1] = cow_Arr1;
        sparseArr1[0][2] = sum;
        int cow_sparse = 1;
        for (int i=1; i<chessArr1.length;i++){
            for(int j=0; j<chessArr1[i].length;j++){
                if(chessArr1[i][j]!=0){
                    sparseArr1[cow_sparse][0]=i;
                    sparseArr1[cow_sparse][1]=j;
                    sparseArr1[cow_sparse][2]=chessArr1[i][j];
                    cow_sparse++;
                }

            }
        }


        //5.输出sparseArr1数组
        System.out.println();
        System.out.println("输出稀疏矩阵:");
        for(int i=0;i<sparseArr1.length;i++){
            for(int j=0;j<sparseArr1[i].length;j++){
                System.out.print("\t" + sparseArr1[i][j]);
            }
            System.out.println();
        }



        //6.将稀疏数组转换为二维矩阵
        int[][] chessArr2 = new int[sparseArr1[0][0]][sparseArr1[0][1]];
        for(int x=1; x<sparseArr1.length; x++){
            chessArr2[sparseArr1[x][0]][sparseArr1[x][1]] = sparseArr1[x][2];
        }

        //7.输出将稀疏矩阵转换为二维矩阵后的矩阵
        System.out.println();
        System.out.println("将稀疏矩阵转换成二维数组后的矩阵");
        for(int i=0; i<chessArr2.length; i++ ){
            for (int j=0; j<chessArr2[i].length; j++){
                System.out.print("\t" + chessArr2[i][j]);
            }
            System.out.println();
        }




    }
}

输出结果

"C:\Program Files\Java\jdk1.8.0_162\bin\java.exe" "-javaagent:D:\software install in d (professional)\software\idea\IntelliJ IDEA 2021.2.3\lib\idea_rt.jar=59338:D:\software install in d (professional)\software\idea\IntelliJ IDEA 2021.2.3\bin" -Dfile.encoding=UTF-8 -classpath "C:\Program Files\java\jdk1.8.0_162\jre\lib\charsets.jar;C:\Program Files\java\jdk1.8.0_162\jre\lib\deploy.jar;C:\Program Files\java\jdk1.8.0_162\jre\lib\ext\access-bridge-64.jar;C:\Program Files\java\jdk1.8.0_162\jre\lib\ext\cldrdata.jar;C:\Program Files\java\jdk1.8.0_162\jre\lib\ext\dnsns.jar;C:\Program Files\java\jdk1.8.0_162\jre\lib\ext\jaccess.jar;C:\Program Files\java\jdk1.8.0_162\jre\lib\ext\jfxrt.jar;C:\Program Files\java\jdk1.8.0_162\jre\lib\ext\localedata.jar;C:\Program Files\java\jdk1.8.0_162\jre\lib\ext\nashorn.jar;C:\Program Files\java\jdk1.8.0_162\jre\lib\ext\sunec.jar;C:\Program Files\java\jdk1.8.0_162\jre\lib\ext\sunjce_provider.jar;C:\Program Files\java\jdk1.8.0_162\jre\lib\ext\sunmscapi.jar;C:\Program Files\java\jdk1.8.0_162\jre\lib\ext\sunpkcs11.jar;C:\Program Files\java\jdk1.8.0_162\jre\lib\ext\zipfs.jar;C:\Program Files\java\jdk1.8.0_162\jre\lib\javaws.jar;C:\Program Files\java\jdk1.8.0_162\jre\lib\jce.jar;C:\Program Files\java\jdk1.8.0_162\jre\lib\jfr.jar;C:\Program Files\java\jdk1.8.0_162\jre\lib\jfxswt.jar;C:\Program Files\java\jdk1.8.0_162\jre\lib\jsse.jar;C:\Program Files\java\jdk1.8.0_162\jre\lib\management-agent.jar;C:\Program Files\java\jdk1.8.0_162\jre\lib\plugin.jar;C:\Program Files\java\jdk1.8.0_162\jre\lib\resources.jar;C:\Program Files\java\jdk1.8.0_162\jre\lib\rt.jar;C:\Users\Administrator\Desktop\code\java\20220227\out\production\Modulate07" Package01.SparseArray
	0	0	0	0	0	0	0	0	0	0	0
	0	0	1	0	0	0	0	0	0	0	0
	0	0	0	1	0	0	0	0	0	0	0
	0	0	0	0	0	0	0	0	0	0	0
	0	0	0	0	0	0	0	0	0	0	0
	0	0	0	0	0	0	0	0	0	0	0
	0	0	0	0	0	0	0	0	0	0	0
	0	0	0	0	0	0	0	0	0	0	0
	0	0	0	0	0	0	0	0	0	0	0
	0	0	0	0	0	0	0	0	0	0	0
	0	0	0	0	0	0	0	0	0	0	0


输出稀疏矩阵:
	11	11	2
	1	2	1
	2	3	1

将稀疏矩阵转换成二维数组后的矩阵
	0	0	0	0	0	0	0	0	0	0	0
	0	0	1	0	0	0	0	0	0	0	0
	0	0	0	1	0	0	0	0	0	0	0
	0	0	0	0	0	0	0	0	0	0	0
	0	0	0	0	0	0	0	0	0	0	0
	0	0	0	0	0	0	0	0	0	0	0
	0	0	0	0	0	0	0	0	0	0	0
	0	0	0	0	0	0	0	0	0	0	0
	0	0	0	0	0	0	0	0	0	0	0
	0	0	0	0	0	0	0	0	0	0	0
	0	0	0	0	0	0	0	0	0	0	0

Process finished with exit code 0

python代码 (jupyter上写的):

import numpy as np

#可以用来计算原始矩阵的不为0的个数
def sum(Array):
    s = 0
    for i in range(Array.shape[0]):
        for j in range(Array.shape[1]):
            if Array[i][j]!=0:
                s = s+1
    return s  

#将arr矩阵里面的非零位置存放在列表里安
def none_list(Array):
    cow = 0
    li = []
    li0 = []
    for i in range(Array.shape[0]):
        ran = 0
        cow = cow+1
        for j in range(Array.shape[1]):
            ran = ran+1
            if Array[i][j]!=0:
                li0 = [cow,ran]
                li.append(li0)
    return np.array(li)  

#稀疏矩阵除了第一行外,将剩余的不为零的地方进行替换
def sparse_change(Array,sparse):
    for i in range(sum(Array)):
        sparse [i+1][0] = none_list(Array)[i][0]
        sparse [i+1][1] = none_list(Array)[i][1]
        sparse [i+1][2] = Array[none_list(Array)[i][0]-1][none_list(Array)[i][1]-1]
    return sparse

#初始化一个数组,arr为原始数组
arr = np.zeros((11,11),dtype = int)
arr[1][2] = arr[2][3] = 1

#初始化稀疏数组,sparseArray为稀疏数组,并对稀疏数组的第一行进行初始化
sparseArray = np.zeros((sum(arr)+1,3),dtype=int)
sparseArray[0][0] = arr.shape[0]
sparseArray[0][1] = arr.shape[1]
sparseArray[0][2] = sum(arr)

#将稀疏数组的其他行进行初始化
sparseArray = sparse_change(arr,sparseArray)
print(arr)
print()
print(sparseArray)
[[0 0 0 0 0 0 0 0 0 0 0]
 [0 0 1 0 0 0 0 0 0 0 0]
 [0 0 0 1 0 0 0 0 0 0 0]
 [0 0 0 0 0 0 0 0 0 0 0]
 [0 0 0 0 0 0 0 0 0 0 0]
 [0 0 0 0 0 0 0 0 0 0 0]
 [0 0 0 0 0 0 0 0 0 0 0]
 [0 0 0 0 0 0 0 0 0 0 0]
 [0 0 0 0 0 0 0 0 0 0 0]
 [0 0 0 0 0 0 0 0 0 0 0]
 [0 0 0 0 0 0 0 0 0 0 0]]

[[11 11  2]
 [ 2  3  1]
 [ 3  4  1]]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Martin__Liu

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值