确定矩阵是否为行梯形形式的函数会给出错误的输出

问题描述 投票:0回答:1

我需要编写一个函数来确定矩阵是否为行阶梯形。我编写了下面的代码,但当全零行位于非零行和全零行之间时,它会给出错误的输出。我该如何解决它?

import numpy as np

def is_row_echelon_form(matrix):
    # Get the dimensions of the matrix.
    num_rows, num_cols = len(matrix), len(matrix[0])

    # Track a key variable to find the first non-zero element in each row.
    key_variable = -1

    for row in range(num_rows):
        if row == num_cols:
            break
        # Find the first non-zero element in each row.
        while key_variable < num_cols - 1:
            key_variable += 1
            if matrix[row][key_variable] != 0:
                break

        if matrix[row][key_variable] != 0:
            # Check if all elements above and below the key variable are zero.
            for i in range(row + 1, num_rows):
                if matrix[i][key_variable] != 0:
                    return False
        else:
            if any(matrix[row][key_variable:]):
                return False

    return True
python linear-algebra
1个回答
0
投票

代码的问题在于,它无法正确处理非零行和另一个全零行之间存在全零行的情况。要解决此问题,您可以修改代码如下:

import numpy as np

def is_row_echelon_form(matrix):
    # Get the dimensions of the matrix.
    num_rows, num_cols = len(matrix), len(matrix[0])

    # Track a key variable to find the first non-zero element in each row.
    key_variable = -1

    for row in range(num_rows):
        if row == num_cols:
            break
        # Find the first non-zero element in each row.
        while key_variable < num_cols - 1:
            key_variable += 1
            if matrix[row][key_variable] != 0:
                break

        if matrix[row][key_variable] != 0:
            # Check if all elements above the key variable are zero.
            for i in range(row):
                if matrix[i][key_variable] != 0:
                    return False
            # Check if all elements below the key variable are zero.
            for i in range(row + 1, num_rows):
                if matrix[i][key_variable] != 0:
                    return False
        else:
            if any(matrix[row][key_variable:]):
                return False

    return True

在更新后的代码中,在找到每行中的第一个非零元素后,我们检查键变量上方和下方的所有元素是否为零。如果找到任何非零元素,我们返回 False。此更改可确保代码正确处理非零行和另一个全零行之间存在全零行的情况。

© www.soinside.com 2019 - 2024. All rights reserved.