Given two matrices, the task is to write a Python program to add elements to each row from initial matrix.
Input : test_list1 = [[4, 3, 5,], [1, 2, 3], [3, 7, 4]], test_list2 = [[1, 3], [9, 3, 5, 7], [8]]
Output : [[4, 3, 5, 1, 3], [1, 2, 3, 9, 3, 5, 7], [3, 7, 4, 8]]
Explanation : Matrix is row wise merged.
Input : test_list1 = [[4, 3, 5,], [1, 2, 3], [3, 7, 4]], test_list2 = [[1], [9], [8]]
Output : [[4, 3, 5, 1], [1, 2, 3, 9], [3, 7, 4, 8]]
Explanation : Matrix is row wise merged.
Method #1: Using enumerate() + loop
In this, we get each index of each initial matrix and append its all elements to the second matrix’s corresponding row.
Python3
test_list1 = [[ 4 , 3 , 5 , ], [ 1 , 2 , 3 ], [ 3 , 7 , 4 ]]
test_list2 = [[ 1 , 3 ], [ 9 , 3 , 5 , 7 ], [ 8 ]]
print ( "The original list 1 is : " + str (test_list1))
print ( "The original list 2 is : " + str (test_list2))
for idx, ele in enumerate (test_list1):
new_vals = []
for ele in test_list2[idx]:
new_vals.append(ele)
test_list1[idx].extend(new_vals)
print ( "The concatenated Matrix : " + str (test_list1))
|
Output:
The original list 1 is : [[4, 3, 5], [1, 2, 3], [3, 7, 4]]
The original list 2 is : [[1, 3], [9, 3, 5, 7], [8]]
The concatenated Matrix : [[4, 3, 5, 1, 3], [1, 2, 3, 9, 3, 5, 7], [3, 7, 4, 8]]
Time Complexity: O(n*n)
Auxiliary Space: O(n)
Method #2: Using zip() + list comprehension
In this, we perform the task of concatenating rows using zip(), and iteration through each row happens using list comprehension.
Python3
test_list1 = [[ 4 , 3 , 5 , ], [ 1 , 2 , 3 ], [ 3 , 7 , 4 ]]
test_list2 = [[ 1 , 3 ], [ 9 , 3 , 5 , 7 ], [ 8 ]]
print ( "The original list 1 is : " + str (test_list1))
print ( "The original list 2 is : " + str (test_list2))
res = list (sub1 + sub2 for sub1, sub2 in zip (test_list1, test_list2))
print ( "The concatenated Matrix : " + str (res))
|
Output:
The original list 1 is : [[4, 3, 5], [1, 2, 3], [3, 7, 4]]
The original list 2 is : [[1, 3], [9, 3, 5, 7], [8]]
The concatenated Matrix : [[4, 3, 5, 1, 3], [1, 2, 3, 9, 3, 5, 7], [3, 7, 4, 8]]
The time and space complexity of both the methods is same:
Time Complexity: O(n2)
Space Complexity: O(n)
Method #3: Using extend()+loop
Python3
test_list1 = [[ 4 , 3 , 5 , ], [ 1 , 2 , 3 ], [ 3 , 7 , 4 ]]
test_list2 = [[ 1 , 3 ], [ 9 , 3 , 5 , 7 ], [ 8 ]]
print ( "The original list 1 is : " + str (test_list1))
print ( "The original list 2 is : " + str (test_list2))
for i in range ( 0 , len (test_list1)):
test_list1[i].extend(test_list2[i])
print ( "The concatenated Matrix : " + str (test_list1))
|
Output
The original list 1 is : [[4, 3, 5], [1, 2, 3], [3, 7, 4]]
The original list 2 is : [[1, 3], [9, 3, 5, 7], [8]]
The concatenated Matrix : [[4, 3, 5, 1, 3], [1, 2, 3, 9, 3, 5, 7], [3, 7, 4, 8]]
Time complexity: O(n*n), where n is the length of the test_list. The extend()+loop takes O(n*n) time
Auxiliary Space: O(n), extra space of size n is required
Method #4: Using numpy
Note: Install numpy module using command “pip install numpy”
Python3
import numpy as np
test_list1 = [[ 4 , 3 , 5 , ], [ 1 , 2 , 3 ], [ 3 , 7 , 4 ]]
test_list2 = [[ 1 , 3 ], [ 9 , 3 , 5 , 7 ], [ 8 ]]
print ( "The original list 1 is : " + str (test_list1))
print ( "The original list 2 is : " + str (test_list2))
res = np.concatenate((test_list1, test_list2), axis = 1 )
print ( "The concatenated Matrix : " + str (res))
|
Output:
The original list 1 is : [[4, 3, 5], [1, 2, 3], [3, 7, 4]]
The original list 2 is : [[1, 3], [9, 3, 5, 7], [8]]
The concatenated Matrix : [[4, 3, 5, 1, 3], [1, 2, 3, 9, 3, 5, 7], [3, 7, 4, 8]]
Time Complexity: O(n^2)
Auxiliary Space: O(n)
Method #5: Using itertools.chain() and map()
This method uses the itertools.chain() function to chain the two input matrices, and the map() function to convert the chained iterable into a list of lists representing the concatenated matrix.
- Import the itertools module.
- Initialize the two matrices test_list1 and test_list2.
- Use the zip() function to pair up corresponding rows of the two matrices.
- For each pair of rows, use itertools.chain() to concatenate them row-wise.
- Convert each concatenated row back into a list.
- Collect all the concatenated rows into a new list, which represents the final concatenated matrix.
Python3
import itertools
test_list1 = [[ 4 , 3 , 5 , ], [ 1 , 2 , 3 ], [ 3 , 7 , 4 ]]
test_list2 = [[ 1 , 3 ], [ 9 , 3 , 5 , 7 ], [ 8 ]]
concatenated_matrix = [ list (itertools.chain( * x)) for x in zip (test_list1, test_list2)]
print ( "The concatenated Matrix : " + str (concatenated_matrix))
|
Output
The concatenated Matrix : [[4, 3, 5, 1, 3], [1, 2, 3, 9, 3, 5, 7], [3, 7, 4, 8]]
Time complexity of the code is O(NM), where N is the number of lists in test_list1 and test_list2, and M is the maximum length of the lists.
The auxiliary space of the code is O(NM), since a new list of length N*M is created to store the concatenated matrix.
Please Login to comment...