单位矩阵
Identity matrix
在学习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
而不是 False
因为问题要求我们检查单位矩阵,其中只有中间的对角线应该有 1,其余的应该是 0。因为matrix[1][3]
不等于1,输出应该是false。有人可以帮忙吗?非常感谢!
就像hiro主角说的,问题出在线路上:
if matrix[i][j] == matrix[i][i]:
您正在检查单元格的值是否与对角线上的值匹配,我假设您要检查您是在对角线上还是在对角线上。
该行应为:
if i == j:
你应该比较 i == j
而不是 matrix[i][j] == matrix[i][i]
。
这里的版本使用 for
而不是 while
。
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
甚至(使用 itertools
中的 product
)保存缩进级别并且对我来说看起来更具可读性:
from itertools import product
def is_identity_matrix(matrix):
n = len(matrix)
if n != len(matrix[0]):
return False
for i, j in product(range(n), range(n)):
if i == j:
if matrix[i][j] != 1:
return False
else:
if matrix[i][j] != 0:
return False
return True
如果你还没有学过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
在学习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
而不是 False
因为问题要求我们检查单位矩阵,其中只有中间的对角线应该有 1,其余的应该是 0。因为matrix[1][3]
不等于1,输出应该是false。有人可以帮忙吗?非常感谢!
就像hiro主角说的,问题出在线路上:
if matrix[i][j] == matrix[i][i]:
您正在检查单元格的值是否与对角线上的值匹配,我假设您要检查您是在对角线上还是在对角线上。
该行应为:
if i == j:
你应该比较 i == j
而不是 matrix[i][j] == matrix[i][i]
。
这里的版本使用 for
而不是 while
。
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
甚至(使用 itertools
中的 product
)保存缩进级别并且对我来说看起来更具可读性:
from itertools import product
def is_identity_matrix(matrix):
n = len(matrix)
if n != len(matrix[0]):
return False
for i, j in product(range(n), range(n)):
if i == j:
if matrix[i][j] != 1:
return False
else:
if matrix[i][j] != 0:
return False
return True
如果你还没有学过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