Ad Code

Responsive Advertisement

Python Program / Project - 11.

Write a python program for sparse matrix realization and operations on it - Transpose, Fast Transpose and addition of two matrices.

Programming Language: Python. IDE: Visual Studio Code ( VSC ). Present: go2collage.

Download hole Program / Project code, by clicking following link:


Programming Code:

def create(s,row_num,col_num,non_zero_values):
    s[0][0]= row_num
    s[0][1] = col_num
    s[0][2] = non_zero_values        
    for k in range(1,non_zero_values+1):
        row = int(input("Enter row value: "))
        col = int(input("Enter col value: "))
        element = int(input("Enter the element: "))
        s[k][0]= row
        s[k][1] = col
        s[k][2] = element        
    
def display(s):
    print("Row\tcol\t Non_Zero_values")
    for i in range(0,(s[0][2]+1)): 
        for j in range(0,3): 
            print(s[i][j], "\t", end='') 
        print() 

def add(s1,s2):
    i = 1
    j = 1
    k = 1
    s3 = []
    if ((s1[0][0] == s2[0][0]) and (s1[0][1] == s2[0][1])):
        while ((i <= s1[0][2]) and (j <= s2[0][2])):            
            if (s1[i][0] == s2[j][0]):
                temp =[]
                if (s1[i][1] == s2[j][1]):
                    temp.append(s1[i][0])
                    temp.append(s1[i][1])
                    temp.append(s1[i][2]+s2[j][2])
                    s3.append(temp)
                    i += 1
                    j += 1
                    k += 1
                elif (s1[i][1]<s2[j][1]):
                    temp.append(s1[i][0])
                    temp.append(s1[i][1])
                    temp.append(s1[i][2])
                    s3.append(temp)
                    i += 1
                    k += 1
                else:
                    temp.append(s2[j][0])
                    temp.append(s2[j][1])
                    temp.append(s2[j][2])
                    s3.append(temp)
                    j += 1
                    k += 1                    
            elif (s1[i][0]<s2[j][0]):
                temp =[]
                temp.append(s1[i][0])
                temp.append(s1[i][1])
                temp.append(s1[i][2])
                s3.append(temp)
                i +=1
                k +=1
            else:
                temp =[]
                temp.append(s1[j][0])
                temp.append(s1[j][1])
                temp.append(s1[j][2])
                s3.append(temp)
                j +=1
                k +=1

        while (i <= s1[0][2]): #s1 is greater than s2
            temp = []
            temp.append(s1[i][0])
            temp.append(s1[i][1])
            temp.append(s1[i][2])
            s3.append(temp)
            i += 1
            k += 1
        while (j <= s2[0][2]): #s2 is greater than s1
            temp = []
            temp.append(s2[j][0])
            temp.append(s2[j][1])
            temp.append(s2[j][2])
            s3.append(temp)            
            j += 1
            k += 1            
       
        s3.insert(0,[s1[0][0],s1[0][1],k-1])
        
        print("\nAddition of Sparse Matrix: ")
        print("Row  Col  Non_Zero_values")
        for row in s3: 
            for element in row: 
                print(element, end ="    ") 
            print() 
    else:
        print("Addition is not possible")
def transpose(s1,row_num,col_num,s2,cols,non_zero_values):
    s2[0][0]= col_num
    s2[0][1] = row_num
    s2[0][2] = non_zero_values
    nxt=1
    for c in range(0,col_num):
   
        for Term in range(1,non_zero_values+1):
            if (s1[Term][1] == c):
                s2[nxt][0] = s1[Term][1]
                s2[nxt][1] = s1[Term][0]
                s2[nxt][2] = s1[Term][2]
                nxt=nxt+1    

def fast_transpose(s1,row_num,col_num,s2,cols,non_zero_values):
    s2[0][0]= col_num
    s2[0][1] = row_num
    s2[0][2] = non_zero_values
    rterm = []
    rpos = []    
    if non_zero_values > 0:
        for  i in range(col_num):
            rterm.insert(i,0)
        for  i in range(1,non_zero_values+1):
            
            index = s1[i][1]
            val = rterm.pop(index)
            rterm.insert(index,val+1)
        rpos.insert(0,1)
        for i in range(1,col_num+1):            
            
            rpos_val=rpos[i-1]
            rterm_val=rterm[i-1]
            rpos.insert(i,(rpos_val+rterm_val))
        for i in range(1,non_zero_values+1):            
            j = rpos[s1[i][1]]
            s2[j][0] = s1[i][1]
            s2[j][1] = s1[i][0]
            s2[j][2] = s1[i][2]
            rpos[s1[i][1]] = j + 1

# Driver Code
print("********** Performing Sparse Matrix Operations **********")
while(True):
    print("1. Adition of Two Matrices.")
    print("2. Simple Transpose.")
    print("3. Fast Transpose.")
    print("4. Exit.")
    choice = int(input("\nEnter your choice: "))
    if (choice == 1):
        # Addition of two matrices
        row_num1 = int(input("Enter total numbers of rows for first matrix: "))
        col_num1 = int(input("Enter total numbers of columns for first matrix: "))
        non_zero_values1 = int(input("Enter total number of non-zero values: "))
        cols = 3
        s1 = [[0 for col in range(cols)] for row in range(non_zero_values1+1) ]
        
        # Creating first sparse matrix
        create(s1,row_num1,col_num1,non_zero_values1)
        print("First sparse matrix is: ")
        display(s1)

        row_num2 = int(input("Enter total numbers of rows for second matrix: "))
        col_num2 = int(input("Enter total numbers of columns for second matrix: "))
        non_zero_values2 = int(input("Enter total number of non-zero values: "))
        s2 = [[0 for col in range(cols)] for row in range(non_zero_values2 + 1) ]
        
        # Creating first sparse matrix
        create(s2,row_num2,col_num2,non_zero_values2)
        print("Second sparse matrix is: ")
        display(s2)

        # Performing and displaying addition of two sparse matrices
        add(s1, s2)

    elif(choice == 2):
        # Simple Transpose
        row_num = int(input("Enter total numbers of rows for first matrix: "))
        col_num = int(input("Enter total numbers of columns for first matrix: "))
        non_zero_values = int(input("Enter total number of non-zero values: "))
        cols = 3
        s = [[0 for col in range(cols)] for row in range(non_zero_values+1)]
        trans_s = [[0 for col in range(cols)] for row in range(non_zero_values+1)]
        create(s,row_num,col_num,non_zero_values)
        print("Original sparse matrix is: ")
        display(s)
        transpose(s,row_num,col_num,trans_s,cols,non_zero_values)
        print("Transposed sparse matrix is: ")
        display(trans_s)

    elif(choice == 3):
        # Fast Transpose
        row_num = int(input("Enter total numbers of rows for first matrix: "))
        col_num = int(input("Enter total numbers of columns for first matrix: "))
        non_zero_values = int(input("Enter total number of non-zero values: "))
        cols = 3
        s = [[0 for col in range(cols)] for row in range(non_zero_values+1)]
        trans_s = [[0 for col in range(cols)] for row in range(non_zero_values+1)]
        create(s,row_num,col_num,non_zero_values)
        print("Original sparse matrix is: ")
        display(s)
        fast_transpose(s,row_num,col_num,trans_s,cols,non_zero_values)
        print("Fast Transposed sparse matrix is: ")
        display(trans_s)

    else:
        print("Exit.")
        break

Output:



Post a Comment

0 Comments

Ad Code

Responsive Advertisement