# Python Program to Multiply to Matrix Using Multi-dimensional Arrays

A matrix is a set of numbers arranged in rows and columns. A matrix with m rows and n columns is called an m X n matrix and m and n are called its dimensions. A matrix is a two dimensional array, which is created by using lists or NumPy arrays in python.

In general, Matrix multiplication can be done by multiplying the rows of the first matrix by the column of the second matrix. Here, the number of columns of the first matrix should be equal to the number of rows of the second matrix.

## Input Output Scenarios

Assuming we have two matrices A and B and these two matrices have 2X3 and 3X2 dimensions respectively. After multiplying the resultant matrix will have 2 rows and 1 column.

              	      [b1, b2]
[a1, a2, a3]    *     [b3, b4]		= 	[a1*b1+a2*b2+a3*a3]
[a4, a5, a6]          [b5, b6]			[a4*b2+a5*b4+a6*b6]


Also, we can do element-wise multiplication of matrices. In this case, the number of rows and columns of two input matrices must be the same.

[a11, a12, a13]	      [b11, b12, b13]		[a11*b11, a12*b12, a13*b13]
[a21, a22, a23]   *   [b21, b22, b23]	    =	[a21*b21, a22*b22, a23*b23]
[a31, a32, a33]	      [b31, b32, b33]		[a31*b31, a32*b32, a33*b33]


## Using For Loop

With a nested for loop, we will execute the multiplication operation on two matrices and store the result in the third matrix.

### Example

In this example, we will initialize a result matrix with all zero’s to store the multiplication results.

# Defining the matrix using multidimensional arrays
matrix_a = [[1,2,3],
[4,1,2],
[2,3,1]]

matrix_b = [[1,2,3,2],
[2,3,6,3],
[3,1,4,2]]

#function for displaying matrix
def display(matrix):
for row in matrix:
print(row)
print()

# Display two input matrices
print('The first matrix is defined as:')
display(matrix_a)
print('The second matrix is defined as:')
display(matrix_b)

# Initializing Matrix with all 0s
result = [[0, 0, 0, 0],[0, 0, 0, 0],[0, 0, 0, 0]]

# multiply two matrices
for i in range(len(matrix_a)):

# iterate through rows
for j in range(len(matrix_b[0])):

# iterate through columns
for k in range(len(matrix_b)):
result[i][j] = matrix_a[i][k] * matrix_b[k][j]

print('The multiplication of two matrices is:')
display(result)


### Output

The first matrix is defined as:
[1, 2, 3]
[4, 1, 2]
[2, 3, 1]

The second matrix is defined as:
[1, 2, 3, 2]
[2, 3, 6, 3]
[3, 1, 4, 2]

The multiplication of two matrices is:
[9, 3, 12, 6]
[6, 2, 8, 4]
[3, 1, 4, 2]


The number of rows and columns of the first matrix (matrix_a) is 3, and the number of rows of the second matrix (matrix_b) is 3 and columns is 4. After multiplying these two matrices (matrix_a, matrix_b) the resultant matrix will have 3 rows and 4 columns (i.e, 3X4).

### Example

Here the matrices are created using the numpy.array() function so that we can simply do the matrix multiplication using the @ operator.

import numpy as np

# Defining the matrix using numpy array
matrix_a = np.array([[1,2,5], [1,0,6], [9,8,0]])
matrix_b = np.array([[0,3,5], [4,6,9], [1,8,0]])

# Display two input matrices
print('The first matrix is defined as:')
print(matrix_a)

print('The second matrix is defined as:')
print(matrix_b)

# multiply two matrices
result = matrix_a @ matrix_b

print('The multiplication of two matrices is:')
print(result)


### Output

The first matrix is defined as:
[[1 2 5]
[1 0 6]
[9 8 0]]
The second matrix is defined as:
[[0 3 5]
[4 6 9]
[1 8 0]]
The multiplication of two matrices is:
[[ 13  55  23]
[  6  51   5]
[ 32  75 117]]


The multiplication operator @ is available from Python 3.5+ versions, otherwise, we can use numpy.dot() function.

### Example

In this example, we will perform an element-wise multiplication operation on two numpy arrays using the (*) asterisk operator.

import numpy as np

# Defining the matrix using numpy array
matrix_a = np.array([[1,2,5], [1,0,6], [9,8,0]])
matrix_b = np.array([[0,3,5], [4,6,9], [1,8,0]])

# Display two input matrices
print('The first matrix is defined as:')
print(matrix_a)

print('The second matrix is defined as:')
print(matrix_b)

# multiply elements of two matrices
result = matrix_a * matrix_b

print('The element-wise multiplication of two matrices is:')
print(result)


### Output

The first matrix is defined as:
[[1 2 5]
[1 0 6]
[9 8 0]]
The second matrix is defined as:
[[0 3 5]
[4 6 9]
[1 8 0]]
The element-wise multiplication of two matrices is:
[[ 0  6 25]
[ 4  0 54]
[ 9 64  0]]


Updated on: 15-May-2023

143 Views