当前位置:首页python > 正文

Python 数据结构:稀疏矩阵(Sparse Matrix)

作者:野牛程序员:2025-12-22 11:13:33python阅读 2007
Python 数据结构:稀疏矩阵(Sparse Matrix)
# /*
# Python 数据结构:稀疏矩阵(Sparse Matrix)
# --------------------------------------------------------
# 概念:
# 稀疏矩阵中大部分元素为 0,
# 直接存储完整矩阵会浪费空间,
# 因此通常只记录非零元素的位置与数值。
#
# 常见存储方式:
# 1) 三元组表(三元组:row, col, value)
# 2) 字典存储 {(行, 列): 值}
# 3) 使用 SciPy 等库的 CSR/CSC 格式(此处展示纯 Python 实现)
# */

# --------------------------------------------------------
# 示例:构造一个稀疏矩阵(普通二维列表)
matrix = [
    [0, 0, 3, 0],
    [22, 0, 0, 0],
    [0, 0, 0, 7],
    [0, 5, 0, 0]
]

print("原矩阵:")
for row in matrix:
    print(row)

# --------------------------------------------------------
# 方法一:三元组表示法(Triplet Form)
triplets = []

for i in range(len(matrix)):
    for j in range(len(matrix[0])):
        if matrix[i][j] != 0:
            triplets.append((i, j, matrix[i][j]))

print("\n三元组表示:", triplets)

# --------------------------------------------------------
# 方法二:使用字典存储非零元素
sparse_dict = {}

for i in range(len(matrix)):
    for j in range(len(matrix[0])):
        val = matrix[i][j]
        if val != 0:
            sparse_dict[(i, j)] = val

print("\n字典表示:", sparse_dict)

# --------------------------------------------------------
# 稀疏矩阵 → 普通矩阵(通过字典还原)
rows = len(matrix)
cols = len(matrix[0])

recover = [[0 for _ in range(cols)] for _ in range(rows)]

for (i, j), val in sparse_dict.items():
    recover[i][j] = val

print("\n字典还原矩阵:")
for row in recover:
    print(row)

# --------------------------------------------------------
# 示例:稀疏矩阵加法(以字典形式实现)
def sparse_add(A, B):
    """A、B 均为稀疏字典 {(i,j): value}"""
    result = A.copy()
    for key, val in B.items():
        result[key] = result.get(key, 0) + val
        if result[key] == 0:
            del result[key]
    return result

# 创建第二个稀疏矩阵示例
matrix2 = [
    [0, 0, 0, 0],
    [0, 9, 0, 0],
    [0, 0, 0, 7],
    [0, 5, 0, 0]
]

# 转成字典稀疏形式
sparse_dict2 = {}
for i in range(len(matrix2)):
    for j in range(len(matrix2[0])):
        if matrix2[i][j] != 0:
            sparse_dict2[(i, j)] = matrix2[i][j]

added = sparse_add(sparse_dict, sparse_dict2)
print("\n稀疏矩阵相加结果(字典格式):", added)

# --------------------------------------------------------
# 要点总结:
# 1) 稀疏矩阵适合零值占比极高的数据;
# 2) 三元组与字典是最常用的纯 Python 存储方式;
# 3) 字典方式支持 O(1) 访问效率;
# 4) 稀疏矩阵加法可通过 key 合并实现;
# 5) 大规模稀疏矩阵通常使用专门库(如 SciPy)。
# */

# 原矩阵:
# [0, 0, 3, 0]
# [22, 0, 0, 0]
# [0, 0, 0, 7]
# [0, 5, 0, 0]
#
# 三元组表示:
# [(0, 2, 3), (1, 0, 22), (2, 3, 7), (3, 1, 5)]
#
# 字典表示:
# {(0, 2): 3, (1, 0): 22, (2, 3): 7, (3, 1): 5}
#
# 字典还原矩阵:
# [0, 0, 3, 0]
# [22, 0, 0, 0]
# [0, 0, 0, 7]
# [0, 5, 0, 0]
#
# 稀疏矩阵相加结果(字典格式):
# {(0, 2): 3, (1, 0): 22, (2, 3): 14, (3, 1): 10, (1, 1): 9}


野牛程序员教少儿编程与信息学奥赛-微信|电话:15892516892
野牛程序员教少儿编程与信息学竞赛-微信|电话:15892516892
  • Python 数据结构:稀疏矩阵(Sparse Matrix)
  • 相关推荐

    最新推荐

    热门点击