单位矩阵

2024-10-03 23:27:01 发布

您现在位置:Python中文网/ 问答频道 /正文

当我在学习python时,我遇到了一个问题,并且一直无法确定是什么地方出了问题。请看下面的python代码。在

def is_identity_matrix(matrix):
    n = len(matrix)
    if n != len(matrix[0]):
        return False
    i = 0
    while i < n:
        j = 0
        while j < n:
            if matrix[i][j] == matrix[i][i]:
                if matrix[i][j] != 1:
                    return False
            else:
                if matrix[i][j] != 0:
                    return False
            j+=1
        i+=1
    return True

matrix6 = [[1,0,0,0],  
           [0,1,0,1],  
           [0,0,1,0],  
           [0,0,0,1]]

print is_identity_matrix(matrix6)

这将输出True而不是{},因为问题要求我们检查单位矩阵,其中只有中间的对角线应该有1,其余的应该是0。由于matrix[1][3]不等于1,因此输出应为false。有人能帮忙吗?非常感谢你!在


Tags: 代码falsetruelenreturnifisdef
3条回答

如果你没有学过range(),就像我现在一样, 我的解决方案是:

def is_identity_matrix(matrix):
    #Write your code here
    n=len(matrix)
    if n==len(matrix[0]):
        i=0
        while i<n:
            j=0
            while j<n:
                if j==i:
                    if matrix[i][j]!=1:
                        return False
                else:
                    if matrix[i][j]!=0 or matrix[j][i]!=0:
                        return False
                j=j+1
            i=i+1
        else:
            return True
    else:
        return False

您应该比较i == j,而不是{}。在

这里的版本使用for而不是{}。在

def is_identity_matrix(matrix):
    n = len(matrix)
    if n != len(matrix[0]):
        return False
    for i in range(n):
        for j in range(n):
            if i == j:
                if matrix[i][j] != 1:
                    return False
            else:
                if matrix[i][j] != 0:
                    return False
    return True

或者甚至(使用product中的product),这样可以节省缩进级别,并且对我来说更易读:

^{pr2}$

就像hiro主角说的,问题就在这一行:

if matrix[i][j] == matrix[i][i]:

您正在检查单元格的值是否与对角线上的值匹配,我假设您要检查是否在对角线上。在

该行应为:

^{pr2}$

相关问题 更多 >