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