判断矩阵行阶梯形的函数在特定全零行场景下输出错误,求修正
修正行阶梯形矩阵判断函数
原代码存在两个核心问题:
- 误将行最简形的要求(主元列下方元素全为0)当成了行阶梯形的判断条件,行阶梯形只要求主元列严格右移,不限制下方元素
- 处理全零行时,
key_variable持续递增,破坏了后续行的主元列判断逻辑,且未确保所有全零行都集中在矩阵底部
以下是修正后的代码:
import numpy as np def is_row_echelon_form(matrix): num_rows, num_cols = len(matrix), len(matrix[0]) last_pivot_col = -1 # 记录上一个非零行的主元列索引 seen_zero_row = False # 标记是否已经遇到全零行 for row in range(num_rows): current_row = matrix[row] # 找到当前行第一个非零元素的列索引 pivot_col = -1 for col in range(num_cols): if current_row[col] != 0: pivot_col = col break if pivot_col == -1: # 当前是全零行,标记后续所有行必须都是全零行 seen_zero_row = True else: # 如果已经遇到过全零行,说明非零行出现在全零行之后,不符合要求 if seen_zero_row: return False # 主元列必须严格大于上一个非零行的主元列 if pivot_col <= last_pivot_col: return False last_pivot_col = pivot_col return True
关键修正点说明
- 移除主元列下方检查:行阶梯形仅要求主元列依次右移,不限制主元下方的元素值,原代码的这个判断是多余的错误条件
- 新增全零行追踪:用
seen_zero_row标记是否出现过全零行,一旦出现,后续所有行必须都是全零行,否则直接返回False - 独立计算每行主元列:不再依赖全局递增的
key_variable,而是每行单独遍历寻找主元列,避免全零行干扰后续行的判断 - 严格主元列递增检查:确保每个非零行的主元列索引严格大于上一个非零行的主元列索引
测试示例
# 正确的行阶梯形(全零行在最后) matrix1 = [[1,2,3],[0,4,5],[0,0,6],[0,0,0]] print(is_row_echelon_form(matrix1)) # 输出True # 错误情况:全零行夹在非零行之间 matrix2 = [[1,2,3],[0,0,0],[0,4,5]] print(is_row_echelon_form(matrix2)) # 输出False # 正确的行阶梯形(主元列右移,下方有非零元素) matrix3 = [[1,2,3],[0,4,5],[0,6,7]] print(is_row_echelon_form(matrix3)) # 输出True
内容的提问来源于stack exchange,提问作者Omer Kumbasar
相关产品推荐
相关产品推荐

