稀疏数组 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]

 

posted on 2019-09-06 16:32  thotf  阅读(424)  评论(0)    收藏  举报

导航