不使用numpy的Python稀疏矩阵相减代码如何编写
稀疏矩阵减法实现优化方案
现有代码核心问题
- 仅遍历了第一个矩阵的坐标键,后续矩阵存在但第一个矩阵不存在的坐标完全没有纳入计算,导致输出丢失对应键值
- 三层嵌套循环完全冗余,无意义遍历会大幅降低运行效率,且实际计算逻辑和内层循环无关
优化实现思路
- 先收集所有输入矩阵中出现过的全部坐标键,从根源上避免坐标遗漏
- 以第一个矩阵的对应坐标值为初始值,依次减去后续所有矩阵同一坐标的取值(坐标不存在时默认取0)
- 兼容任意数量的输入矩阵,不限制仅能处理3个矩阵的场景
优化后代码
def sparse_matrices(matrix_list): # 收集所有矩阵出现过的坐标键 all_keys = set() for mat in matrix_list: all_keys.update(mat.keys()) result = {} # 逐个坐标计算减法结果 for key in all_keys: # 初始值取第一个矩阵的对应坐标值,不存在则为0 val = matrix_list[0].get(key, 0) # 依次减去后续所有矩阵的对应坐标值 for sub_mat in matrix_list[1:]: val -= sub_mat.get(key, 0) result[key] = val return result # 测试示例 if __name__ == "__main__": test_input = [{(1, 3): 2, (2, 7): 1}, {(1, 3): 6, (9,10): 7}, {(2,7): 0.5, (4,2): 10}] print(sparse_matrices(test_input)) # 输出:{(1, 3): -4, (2, 7): 0.5, (9, 10): -7, (4, 2): -10}
代码优势
- 完全不依赖numpy等第三方库,符合需求
- 输出结果和题目预期完全一致,不会遗漏仅在后续矩阵中出现的坐标
- 时间复杂度为O(n),n为所有矩阵的总键数,运行效率远高于原有实现
- 支持任意数量的输入矩阵,适配性更强
内容的提问来源于stack exchange,提问作者KOpyko
相关产品推荐
相关产品推荐

