使用Python检查矩阵是否对称
在本文中,我们将学习一个Python程序,用于检查矩阵是否对称。
什么是对称矩阵?
如果方阵的转置与其原矩阵相同,则称该矩阵为对称矩阵。 通过将行变为列,列变为行,可以得到对称矩阵。
例如
2 6 8 6 1 3 8 3 9
假设我们已经得到一个NxN的输入矩阵。 我们现在将使用以下方法检查该矩阵是否对称。
使用的方法
以下是完成此任务的各种方法
使用嵌套For循环
无需转置矩阵的高效解决方案
使用列表推导式
方法1:使用嵌套For循环
算法(步骤)
以下是执行所需任务的算法/步骤:−
创建一个函数transposeMatrix()来获取矩阵的转置。
使用for循环遍历矩阵的行。
使用另一个嵌套for循环遍历当前行的列。
获取输入矩阵的转置,即交换行和列。
创建一个函数checkingSymmetric(),该函数通过接受输入矩阵和行数作为参数,如果矩阵对称则返回true,否则返回false。
调用上述transposeMatrix()函数以获取矩阵的转置。
遍历矩阵
使用if条件语句检查当前元素是否不等于转置矩阵元素。
如果上述条件为真,则返回False。
如果在上述嵌套循环中没有返回False,则它是对称的,因此返回True。
创建一个变量来存储输入矩阵。
调用上述checkingSymmetric()函数,并使用if条件语句通过传递输入矩阵和行数作为参数来检查该函数是否返回true。
如果条件为真,即如果函数返回true,则打印“对称矩阵”。
否则打印“不是对称矩阵”。
示例
以下程序使用嵌套For循环检查输入矩阵是否对称:−
# creating a function for getting the transpose of a matrix def transposeMatrix(inputMatrix, t, rows): # traversing through the rows of a matrix for p in range(rows): # traversing the columns of a current row for q in range(rows): # transposing the matrix i.e, exchange the rows and cols t[p][q] = inputMatrix[q][p] # creating a function that returns true if the matrix is symmetric # else false by accepting the input matrix, no of rows as arguments def checkingSymmetric(inputMatrix, rows): # Creating the new matrix with all 0 values t = [[0 for q in range(len(inputMatrix[0]))] for p in range(len(inputMatrix))] # calling the above transposeMatrix() function to transpose the given matrix transposeMatrix(inputMatrix, t, rows) # traversing through the rows of a matrix for p in range(rows): # traversing the columns of a current row for q in range(rows): # checking whether the current element is not equal transpose matrix element if (inputMatrix[p][q] != t[p][q]): # returning False if the condition is true return False # else returning True return True # input matrix inputMatrix = [[6, 3, 5], [3, 2, 4], [5, 4, 6]] # checking whether above defined checkingSymmetric() function returns true # by calling it by passing input matrix and no of rows as arguments if (checkingSymmetric(inputMatrix, 3)): # printing "Symmetric matrix" if the function returns true print("Input matrix is a Symmetric matrix") else: # else printing NOT a Symmetric matrix print("Input matrix is NOT a Symmetric matrix")
输出
执行上述程序后,将生成以下输出:−
Input matrix is a Symmetric matrix
时间复杂度 − O(N x N)
辅助空间 − O(N x N)
方法2:无需转置矩阵的高效解决方案
为了快速确定矩阵是否对称,请比较其元素而不进行转置。 在此方法中,我们将比较matrix[i][j]和matrix[j][i]。
示例
以下程序使用比较来检查输入矩阵是否对称:−
# creating a function that returns true if the matrix is symmetric # else false by accepting the input matrix, no of rows as arguments def checkingSymmetric(inputMatrix, rows): # traversing through the rows of a matrix for p in range(rows): # traversing the columns of a current row for q in range(rows): # checking whether the current element is not equal to its transpose if (inputMatrix[p][q] != inputMatrix[q][p]): # returning False if the condition is true return False # else returning True return True # input matrix inputMatrix = [[6, 3, 5], [3, 2, 4], [5, 4, 6]] if (checkingSymmetric(inputMatrix, 3)): print("Input matrix is a Symmetric matrix") else: print("Input matrix is NOT a Symmetric matrix")
输出
Input matrix is a Symmetric matrix
时间复杂度 − O(N x N)
辅助空间 − O(1)
方法3:使用列表推导式
示例
以下程序使用列表推导式检查输入矩阵是否对称:−
# creating a function that returns true if the matrix is symmetric # else false by accepting the input matrix, no of rows as arguments def checkingSymmetric(inputMatrix, rows): # getting transpose of a matrix transpose_matrix = [[inputMatrix[q][p] for q in range(rows)] for p in range(rows)] # checking whether the input matrix is not equal to the transpose matrix if(inputMatrix == transpose_matrix): return True return False # input matrix inputMatrix = [[6, 3, 5], [3, 2, 4], [5, 4, 6]] if (checkingSymmetric(inputMatrix, 3)): print("Input matrix is a Symmetric matrix") else: print("Input matrix is NOT a Symmetric matrix")
输出
Input matrix is a Symmetric matrix
时间复杂度 − O(N*N)
辅助空间 − O(N*N)
结论
在本文中,我们首先学习了什么是对称矩阵,然后学习了如何使用三种不同的方法来实现一个程序,以确定给定的矩阵是否对称。此外,我们学习了一种有效的方法来确定给定的矩阵是否对称,而无需进行转置,这节省了空间并将空间复杂度降低到O(1)。