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:
0 Comments