# Numpy - Calculate Matrix product of two large arrays using For loops and Optimization

## NumPy: Performance Optimization Exercise-19 with Solution

Write a function to calculate the matrix product of two large 2D NumPy arrays using nested for loops. Optimize it using NumPy's matmul() function.

**Sample Solution:**

**Python Code:**

```
import numpy as np
# Generate two large 2D NumPy arrays with random integers
array1 = np.random.randint(1, 100, size=(500, 500))
array2 = np.random.randint(1, 100, size=(500, 500))
# Function to calculate the matrix product using nested for loops
def matrix_product_with_loops(A, B):
result = np.zeros((A.shape[0], B.shape[1]))
for i in range(A.shape[0]):
for j in range(B.shape[1]):
for k in range(A.shape[1]):
result[i, j] += A[i, k] * B[k, j]
return result
# Calculate the matrix product using the nested for loops method
product_with_loops = matrix_product_with_loops(array1, array2)
# Calculate the matrix product using NumPy's matmul() function
product_with_numpy = np.matmul(array1, array2)
# Display first 5x5 section of the result to verify
print("Matrix product using for loops (first 5x5 elements):")
print(product_with_loops[:5, :5])
print("Matrix product using NumPy (first 5x5 elements):")
print(product_with_numpy[:5, :5])
```

Output:

Matrix product using for loops (first 5x5 elements): [[1272510. 1280577. 1151828. 1232191. 1328246.] [1282428. 1265964. 1181278. 1254038. 1291497.] [1193518. 1248841. 1188901. 1201621. 1287151.] [1256727. 1254756. 1196737. 1222706. 1348403.] [1265526. 1301441. 1208882. 1258619. 1372655.]] Matrix product using NumPy (first 5x5 elements): [[1272510 1280577 1151828 1232191 1328246] [1282428 1265964 1181278 1254038 1291497] [1193518 1248841 1188901 1201621 1287151] [1256727 1254756 1196737 1222706 1348403] [1265526 1301441 1208882 1258619 1372655]]

**Explanation:**

- Importing numpy: We first import the numpy library for array manipulations.
- Generating large arrays: Two large 2D NumPy arrays with random integers are generated.
- Defining the function: A function matrix_product_with_loops is defined to calculate the matrix product using nested for loops.
- Calculating with loops: The matrix product is calculated using the nested for loops method.
- Calculating with numpy: The matrix product is calculated using NumPy's built-in matmul() function.
- Displaying results: The first 5x5 section of the matrix product from both methods is printed out to verify correctness.

**Python-Numpy Code Editor:**

**Have another way to solve this solution? Contribute your code (and comments) through Disqus.**

**Previous:** Numpy - Compute Variance of large array using For loop and Optimization.

**Next:** Numpy - Reverse elements of large array using For loop and Optimization.

**What is the difficulty level of this exercise?**

Test your Programming skills with w3resource's quiz.

**Weekly Trends and Language Statistics**- Weekly Trends and Language Statistics