稀疏数组

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

python 稀疏 点 python稀疏矩阵索引_矩阵

压缩稀疏数组

稀疏数组的压缩方法:
1.先遍历数组one得到数组的行(n),列(m),非零值(y)的数目,
2.构建一个(n+1,3)的数组temp,
3,temp[0]存储遍历得到的行,列,和非零值的数目
4,temp的其他行存储one中非零值的行,列下标和值

python 稀疏 点 python稀疏矩阵索引_算法_02

稀疏数组还原

1.压缩矩阵的还原:根据temp的第一行得到原矩阵的行,列的数目
2.创建一个n行m列的空矩阵result
3.遍历压缩矩阵temp,得到非零值在矩阵result中的位置和相应的值,进行赋值
1.2步,得到压缩矩阵temp第一行关于原矩阵行列的数目,并创建result矩阵

代码

# 稀疏数组:在数组中,若数值为0的元素数目远远多于非0元素的数目,并且非0元素分布没有规律时,则称该矩阵为稀疏数组。
# 稀疏数组的压缩方法:1.先遍历数组one得到数组的行(n),列(m),非零值(y)的数目,
# ----------------2.构建一个(n+1,3)的数组temp,
# ----------------3,temp[0]存储遍历得到的行,列,和非零值的数目
# ----------------4,temp的其他行存储one中非零值的行,列下标和值


one = [
    [0, 0, 0, 22, 0, 0, 15],
    [0, 11, 0, 0, 0, 17, 0],
    [0, 0, 0, -6, 0, 0, 0],
    [0, 0, 0, 0, 0, 39, 0],
    [91, 0, 0, 0, 0, 0, 0],
    [0, 0, 28, 0, 0, 0, 0]
]
# 1.先遍历数组one得到数组的行(n),列(m),非零值(y)的数目,
value = 0
row = len(one)
col = len(one[0])
r = 0
c = 0
while r < row:
    while c < col:
        if one[r][c] != 0:
            value += 1
        c += 1
    r += 1
    c = 0
# 2.构建一个(n+1,3)的数组temp,
temp = [[0 for i in range(3)] for i in range(value + 1)]  # 创建好了temp的大小,接下来只需要往里面填数据就行了
# 3,temp[0]存储遍历得到的行,列,和非零值的数目
# 4,temp的其他行存储one中非零值的行,列下标和值
temp[0][0] = row
temp[0][1] = col
temp[0][2] = value
tr = 1
r = 0
for i in one:
    for b in i:
        if b != 0:
            temp[tr][0] = r
            temp[tr][1] = c
            temp[tr][2] = b
            tr += 1
        c += 1
    r += 1
    c = 0

print('压缩之后的矩阵:\n', temp)
# ---------------------1.压缩矩阵的还原:根据temp的第一行得到原矩阵的行,列的数目
# ---------------------2.创建一个n行m列的空矩阵result
# ---------------------3.遍历压缩矩阵temp,得到非零值在矩阵result中的位置和相应的值,进行赋值
# 1.2步,得到压缩矩阵temp第一行关于原矩阵行列的数目,并创建result矩阵
result = [[0 for i in range(temp[0][1])] for i in range(temp[0][0])]
# 第3步,遍历压缩矩阵temp,得到非零值在矩阵result中的位置和相应的值,进行赋值
for i in range(1, temp[0][0]):
    result[temp[i][0]][temp[i][1]] = temp[i][2]

print('还原后的矩阵:\n', result)

结果

python 稀疏 点 python稀疏矩阵索引_python 稀疏 点_03