Open In App

Python Program to check if a matrix is symmetric

Last Updated : 29 Mar, 2023
Improve
Improve
Like Article
Like
Save
Share
Report

A square matrix is said to be a symmetric matrix if the transpose of the matrix is the same as the given matrix. The symmetric matrix can be obtained by changing row to column and column to row.

Examples: 

Input : 1 2 3
           2 1 4
           3 4 3
Output : Yes

Input : 3 5 8
           3 4 7
           8 5 3
Output : No

Method 1:

A Simple solution is to do the following. 

1) Create a transpose of the given matrix. 
2) Check if transpose and given matrices are the same or not.  

Python




# Simple Python code for check a matrix is
# symmetric or not.
 
# Fills transpose of mat[N][N] in tr[N][N]
 
 
def transpose(mat, tr, N):
    for i in range(N):
        for j in range(N):
            tr[i][j] = mat[j][i]
 
# Returns true if mat[N][N] is symmetric, else false
 
 
def isSymmetric(mat, N):
 
    tr = [[0 for j in range(len(mat[0]))] for i in range(len(mat))]
    transpose(mat, tr, N)
    for i in range(N):
        for j in range(N):
            if (mat[i][j] != tr[i][j]):
                return False
    return True
 
 
# Driver code
mat = [[1, 3, 5], [3, 2, 4], [5, 4, 1]]
if (isSymmetric(mat, 3)):
    print "Yes"
else:
    print "No"


Output

Yes

Time Complexity : O(N x N) 
Auxiliary Space : O(N x N)

Method 2:

An Efficient solution to check a matrix is symmetric or not is to compare matrix elements without creating a transpose. We basically need to compare mat[i][j] with mat[j][i].  

Python




# Efficient Python code for check a matrix is
# symmetric or not.
 
# Returns true if mat[N][N] is symmetric, else false
 
 
def isSymmetric(mat, N):
    for i in range(N):
        for j in range(N):
            if (mat[i][j] != mat[j][i]):
                return False
    return True
 
 
# Driver code
mat = [[1, 3, 5], [3, 2, 4], [5, 4, 1]]
if (isSymmetric(mat, 3)):
    print "Yes"
else:
    print "No"


Output

Yes

Time Complexity : O(N x N) 
Auxiliary Space : O(1)

Method 3: Using List Comprehension

Python3




def isSymmetric(mat, N):
    transmat = [[(mat[j][i]) for j in range(N)] for i in range(N)]
    if(mat == transmat):
        return True
    return False
 
 
# Driver code
mat = [[1, 3, 5], [3, 2, 4], [5, 4, 1]]
if (isSymmetric(mat, 3)):
    print("Yes")
else:
    print("No")


Output

Yes

Time Complexity : O(N*N) 
Auxiliary Space : O(N*N)

Please refer complete article on Program to check if a matrix is symmetric for more details!

Method 4:Using numpy.array() and numpy.transpose() :

Algorithm:

  1. Convert the given matrix into its transpose using numpy’s transpose method and store it in a new variable named “transmat”.
  2. Check if the original matrix is equal to its transpose using numpy’s array_equal method.
  3. If the matrices are equal, return True, otherwise return False.

Python3




import numpy as np
 
def isSymmetric(mat, N):
    transmat = np.array(mat).transpose()
    if np.array_equal(mat, transmat):
        return True
        return False
 
# Driver code
mat = [[1, 3, 5], [3, 2, 4], [5, 4, 1]]
if (isSymmetric(mat, 3)):
     
    print("Yes")
else:
    print("No")
     
    #This code is contributed by Jyothi pinjala.


Output:
Yes

Time complexity:

The time complexity  is O(N^2) because the transpose operation takes O(N^2) time and the array_equal operation takes O(N^2) time.

Auxiliary Space:

The space complexity  is O(N^2) because we are creating a new matrix of size N x N for storing the transpose of the original matrix.



Like Article
Suggest improvement
Previous
Next
Share your thoughts in the comments

Similar Reads