You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

判断矩阵行阶梯形的函数在特定全零行场景下输出错误,求修正

修正行阶梯形矩阵判断函数

原代码存在两个核心问题:

  1. 误将行最简形的要求(主元列下方元素全为0)当成了行阶梯形的判断条件,行阶梯形只要求主元列严格右移,不限制下方元素
  2. 处理全零行时,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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.07 15:38:24