这个程序测试一个矩阵是否是单位矩阵。
我已经将我的代码粘贴在下面,并想知道如何优化此代码的效率。我也是python编程的新手,有没有内置的函数可以解决这个问题呢?
def is_identity_matrix(test):
if (test == []):
return False
i = 0
while (i < len(test)):
if (len(test[i]) == len(test)):
j = 0
while(j < len(test[i])):
if (j != i):
if(test[i][j] != 0):
return False
else:
if(test[i][j] != 1):
return False
if(j == (len(test[i]) - 1)):
break
j += 1
if(i == (len(test) - 1)):
break
i += 1
else:
return False
if(i == j and i == (len(test) - 1)):
return True
# Test Cases:
matrix1 = [[1,0,0,0],
[0,1,0,0],
[0,0,1,0],
[0,0,0,1]]
print is_identity_matrix(matrix1)
#>>>True
matrix2 = [[1,0,0],
[0,1,0],
[0,0,0]]
print is_identity_matrix(matrix2)
#>>>False
matrix3 = [[2,0,0],
[0,2,0],
[0,0,2]]
print is_identity_matrix(matrix3)
#>>>False
matrix4 = [[1,0,0,0],
[0,1,1,0],
[0,0,0,1]]
print is_identity_matrix(matrix4)
#>>>False
matrix5 = [[1,0,0,0,0,0,0,0,0]]
print is_identity_matrix(matrix5)
#>>>False
matrix6 = [[1,0,0,0],
[0,1,0,2],
[0,0,1,0],
[0,0,0,1]]
print is_identity_matrix(matrix6)
#>>>False发布于 2013-05-18 01:00:50
def is_identity_matrix(listoflist):
return all(val == (x == y)
for y, row in enumerate(listoflist)
for x, val in enumerate(row))(不过,这不会检查矩阵是否为正方形,如果是空列表,则返回True )
说明:在all中,我们有一个带有嵌套循环的生成器表达式,其中val循环遍历矩阵中的每个值。x == y在对角线上的计算结果为True,在其他位置的计算结果为False。在Python中,True == 1和False == 0,所以你可以比较val == (x == y)。括号很重要:val == x == y将是一个与val == x and x == y等效的链式比较
发布于 2013-05-18 00:55:01
我会使用numpy
(np.array(matrix1) == np.identity(len(matrix1))).all()当然,如果您首先将matrix1存储为numpy数组,以避免转换,效果会更好。
发布于 2013-05-18 00:55:13
乘以全一向量,并检查结果是否相同
https://stackoverflow.com/questions/16614198
复制相似问题