稀疏数组 python描述
什么是稀疏矩阵?
在矩阵中,若数值为0的元素数目远远多于非0元素的数目,并且非0元素分布没有规律时,则称该矩阵为稀疏矩阵。
作用:
在这种情况下,很多0值无疑是很浪费空间的,当我们要把数组存储在磁盘中时,可以用一个数组来存储它的有效信息,达到压缩数组的效果,节约空间。
处理方法:
1、记录数组一共有几行几列,有多少个不同的值。
2、把具有不通知的元素的行列及值记录在一个小规模的数组中,从而缩小程序的规模。
图例:

#稀疏数组 m = n = 6 #6X6二维数组 arrys = [[0 for i in range(m)] for i in range(n)] arrys[1][2] = 1 #数组赋值 arrys[3][5] = 2 """[[0, 0, 0, 0, 0, 0], [0, 0, 1, 0, 0, 0], [0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 2], [0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0]]""" #自动生成稀疏数组 line = len(arrys) #获取原数组行列数 column = len(arrys[0]) value_count = 0 #值计数器 for i,v in enumerate(arrys): #循环数组每一个元素找到有多少个元素有值 for ii,vv in enumerate(v): if vv: value_count += 1 """稀疏数组 : 有原数组的value个数+1 行, 有三列 其中第一行 也就是sparse_array[0]比较特别,sparse_array[0][0]表示原数组的行数 sparse_array[0][1]表示原数组的列数 sparse_array[0][2]表示原数组的value个数。 其余稀疏数组的 每一行表示 一个原数组的value [x][0]代表这个元素位于原数组的行 [x][1]代表列 [x][2]代表value具体的值 """ sparse_array = [[0 for i in range(value_count+1)] for i in range(3)] #创建稀疏数组 sparse_array[0][0] = line sparse_array[0][1] = column sparse_array[0][2] = value_count s_count = 1 #计数器 for i,v in enumerate(arrys): #给稀疏数组赋值 for ii,vv in enumerate(v): if vv: sparse_array[s_count][0] = i sparse_array[s_count][1] = ii sparse_array[s_count][2] = vv s_count += 1 """sparse_array : [[6, 6, 2], [1, 2, 1], [3, 5, 2]]""" #从稀疏数组还原到原数组 old_arry = [[0 for i in range(sparse_array[0][0])] \ for i in range(sparse_array[0][1])] #生成原二维数组 for k,val in enumerate(sparse_array): if k == 0: continue old_arry[val[0]][val[1]] = val[2]
浙公网安备 33010602011771号