While working on a data analysis project, I needed to handle two-dimensional data efficiently. The solution? Python matrices! Whether you’re building a machine learning model, solving a system of equations, or analyzing data, matrices are essential tools in Python programming.
In this article, I’ll cover five simple ways to create matrices in Python, from using built-in lists to specialized libraries like NumPy and pandas.
So let’s dive in!
Create a Matrix in Python
Let me show you how to create a matrix in Python using various methods, along with suitable examples.
Read NumPy Normalize 0 and 1 in Python
Method 1 – Use Nested Lists
Creating matrices with Python’s built-in lists is the simplest approach for beginners.
Here’s how to create a simple 3×3 matrix:
# Creating a 3x3 matrix using nested lists
matrix = [
[1, 2, 3],
[4, 5, 6],
[7, 8, 9]
]
# Accessing elements
print(matrix[0][0])
print(matrix[1][2])
# Printing the entire matrix
for row in matrix:
print(row)Output:
1
6
[1, 2, 3]
[4, 5, 6]
[7, 8, 9]You can see the output in the screenshot below.

This method is simple but has limitations. Operations like matrix multiplication aren’t built-in, and you’ll need to write your functions for that.
Check out Create a 2D NumPy Array in Python
Method 2 – Use NumPy Arrays
NumPy is the gold standard for numerical computing in Python, offering efficient features for matrix operations.
First, install NumPy if you haven’t already:
pip install numpyHere’s how to create matrices with NumPy:
import numpy as np
# Creating a matrix from a list
matrix1 = np.array([[1, 2, 3], [4, 5, 6], [7, 8, 9]])
print(matrix1)
# Creating a matrix of zeros
zeros_matrix = np.zeros((3, 3))
print(zeros_matrix)
# Creating a matrix of ones
ones_matrix = np.ones((3, 3))
print(ones_matrix)
# Creating an identity matrix
identity_matrix = np.eye(3)
print(identity_matrix)
# Creating a matrix with random values
random_matrix = np.random.rand(3, 3)
print(random_matrix)You can see the output in the screenshot below.

The real power of NumPy matrices comes with operations:
import numpy as np
# Creating two matrices
a = np.array([[1, 2], [3, 4]])
b = np.array([[5, 6], [7, 8]])
# Matrix addition
print(a + b)
# Matrix multiplication
print(np.dot(a, b))
# Or using the @ operator (Python 3.5+)
print(a @ b)
# Matrix transpose
print(a.T)
# Matrix determinant
print(np.linalg.det(a))If you’re working with numerical data, NumPy is almost always the way to go.
Read NumPy Unique Function in Python
Method 3 – Use pandas DataFrames
When your matrix represents tabular data with row and column labels, pandas DataFrames are excellent.
First, install pandas:
pip install pandasHere’s how to create a matrix using pandas:
import pandas as pd
import numpy as np
# Creating a DataFrame from a NumPy array
data = np.array([[1, 2, 3], [4, 5, 6], [7, 8, 9]])
df = pd.DataFrame(data, columns=['A', 'B', 'C'], index=['Row1', 'Row2', 'Row3'])
print(df)
# Accessing elements
print(df.loc['Row1', 'A'])
print(df.iloc[0, 0])
# DataFrame operations
print(df.mean()) # Column means
print(df.sum()) # Column sumsYou can see the output in the screenshot below.

I’ve found pandas particularly useful when working with data that needs labeling or when I need to perform data analysis tasks like filtering or aggregation.
Check out np.unit8 in Python
Method 4 – Use SciPy Sparse Matrices
When dealing with large matrices where most elements are zero (sparse matrices), SciPy’s sparse module is much more memory-efficient.
Install SciPy if needed:
pip install scipyHere’s how to create sparse matrices:
from scipy import sparse
# Creating a sparse matrix (Coordinate format)
# Format: sparse.coo_matrix((data, (row_indices, col_indices)), shape=(rows, cols))
row_indices = [0, 1, 2, 0]
col_indices = [0, 1, 2, 2]
data = [1, 2, 3, 4]
sparse_matrix = sparse.coo_matrix((data, (row_indices, col_indices)), shape=(3, 3))
print(sparse_matrix)
# Convert to dense matrix to view all elements
print(sparse_matrix.toarray())
# Other sparse formats
csr_matrix = sparse.csr_matrix(sparse_matrix) # Compressed Sparse Row format
csc_matrix = sparse.csc_matrix(sparse_matrix) # Compressed Sparse Column formatI’ve used this approach when building recommendation systems where the user-item interaction matrix was extremely sparse.
Read NumPy Divide Array by Scalar in Python
Method 5 – Use SymPy for Symbolic Matrices
For mathematical operations where you need symbolic computation rather than numerical values, SymPy is the way to go.
Install SymPy:
pip install sympy
Here’s how to create symbolic matrices:
import sympy as sp
# Define symbolic variables
x, y, z = sp.symbols('x y z')
# Create a symbolic matrix
symbolic_matrix = sp.Matrix([
[x, y, z],
[y, z, x],
[z, x, y]
])
print(symbolic_matrix)
# Matrix operations
determinant = symbolic_matrix.det()
print(f"Determinant: {determinant}")
inverse = symbolic_matrix.inv()
print(f"Inverse: {inverse}")
eigenvals = symbolic_matrix.eigenvals()
print(f"Eigenvalues: {eigenvals}")This method is particularly useful when working on mathematical proofs or when you need to solve equations symbolically.
Check out Copy a NumPy Array to the Clipboard through Python
Real-World Application: Stock Portfolio Analysis
Let’s put our matrix knowledge to work with a practical example, analyzing a portfolio of popular US stocks:
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
# Example stock price data (simplified)
# Rows: Days, Columns: Stocks (Apple, Microsoft, Google)
stock_prices = np.array([
[150.25, 290.15, 2680.70], # Day 1
[152.75, 292.85, 2695.45], # Day 2
[151.80, 291.20, 2700.35], # Day 3
[153.65, 295.30, 2710.65], # Day 4
[155.20, 297.45, 2725.80] # Day 5
])
# Create a DataFrame for better visualization
stocks_df = pd.DataFrame(
stock_prices,
columns=['AAPL', 'MSFT', 'GOOGL'],
index=pd.date_range('2023-01-01', periods=5, freq='D')
)
print(stocks_df)
# Calculate daily returns
daily_returns = stocks_df.pct_change().dropna()
print("\nDaily Returns:")
print(daily_returns)
# Calculate correlation matrix
correlation_matrix = daily_returns.corr()
print("\nCorrelation Matrix:")
print(correlation_matrix)
# Visualize correlation matrix
plt.figure(figsize=(8, 6))
plt.imshow(correlation_matrix, cmap='coolwarm')
plt.colorbar()
plt.xticks(range(len(correlation_matrix.columns)), correlation_matrix.columns)
plt.yticks(range(len(correlation_matrix.columns)), correlation_matrix.columns)
plt.title('Stock Correlation Matrix')
plt.savefig('correlation_matrix.png')This example showcases how we can analyze relationships between different stocks using matrices and visualization.
Read Convert the DataFrame to a NumPy Array Without Index in Python
Choose the Right Matrix Method
After years of working with Python, I’ve found that each matrix method has its place:
- Nested Lists: Great for simple, small matrices when you’re getting started
- NumPy Arrays: Perfect for numerical computations and mathematical operations
- Pandas DataFrames: Ideal for labeled data and data analysis tasks
- SciPy Sparse Matrices: Essential for large, sparse matrices to save memory
- SymPy Matrices: Best for symbolic mathematics and equation solving
The best approach depends on your specific needs – consider what operations you’ll perform on your matrices and choose accordingly.
I hope you found this article helpful. In this tutorial, I have explained to you the methods to create a matrix in Python using nested lists, numpy arrays, pandas dataframes, scipy sparse matrices, sympy for portfolio analysis, and sympy for symbolic matrices. I also covered real-world applications and choosing the right matrix method.
You may read:
- np.count() function in Python
- Use np.argsort in Descending Order in Python
- NumPy Filter 2D Array by Condition in Python

I am Bijay Kumar, a Microsoft MVP in SharePoint. Apart from SharePoint, I started working on Python, Machine learning, and artificial intelligence for the last 5 years. During this time I got expertise in various Python libraries also like Tkinter, Pandas, NumPy, Turtle, Django, Matplotlib, Tensorflow, Scipy, Scikit-Learn, etc… for various clients in the United States, Canada, the United Kingdom, Australia, New Zealand, etc. Check out my profile.