In NumPy, vectors can be represented as one - dimensional arrays, and matrices as two - dimensional arrays.
import numpy as np
# Creating a vector
vector = np.array([1, 2, 3])
print("Vector:")
print(vector)
# Creating a matrix
matrix = np.array([[1, 2, 3], [4, 5, 6], [7, 8, 9]])
print("\nMatrix:")
print(matrix)
In the above code, we first import the NumPy library. Then we create a one - dimensional array vector
and a two - dimensional array matrix
.
NumPy provides functions for common matrix operations such as addition, subtraction, multiplication, and transposition.
# Matrix addition
A = np.array([[1, 2], [3, 4]])
B = np.array([[5, 6], [7, 8]])
C = A + B
print("Matrix Addition:")
print(C)
# Matrix multiplication
D = np.dot(A, B)
print("\nMatrix Multiplication:")
print(D)
# Matrix transpose
E = A.T
print("\nMatrix Transpose:")
print(E)
Here, we perform matrix addition, multiplication using np.dot()
, and transposition using the .T
attribute.
A system of linear equations can be represented in the form (Ax = b), where (A) is a matrix, (x) is a vector of unknowns, and (b) is a vector. NumPy provides the np.linalg.solve()
function to solve such systems.
# Define the matrix A and vector b
A = np.array([[3, 1], [1, 2]])
b = np.array([9, 8])
# Solve the system of linear equations
x = np.linalg.solve(A, b)
print("Solution of the system of linear equations:")
print(x)
In this example, we define a (2\times2) matrix (A) and a vector (b). Then we use np.linalg.solve()
to find the vector (x) that satisfies (Ax = b).
Eigenvalues and eigenvectors are important concepts in linear algebra. NumPy’s np.linalg.eig()
function can be used to compute them.
# Define a matrix
M = np.array([[1, 2], [2, 1]])
# Compute eigenvalues and eigenvectors
eigenvalues, eigenvectors = np.linalg.eig(M)
print("Eigenvalues:")
print(eigenvalues)
print("\nEigenvectors:")
print(eigenvectors)
The np.linalg.eig()
function returns an array of eigenvalues and a matrix whose columns are the corresponding eigenvectors.
Matrix decomposition is the process of breaking down a matrix into a product of simpler matrices. One common decomposition is the Singular Value Decomposition (SVD).
# Define a matrix
N = np.array([[1, 2], [3, 4], [5, 6]])
# Perform SVD
U, S, VT = np.linalg.svd(N)
print("U matrix:")
print(U)
print("\nSingular values:")
print(S)
print("\nVT matrix:")
print(VT)
Here, we use np.linalg.svd()
to perform the SVD of a matrix (N). It returns three matrices (U), (S), and (V^T).
When performing matrix operations, the shapes of the matrices must be compatible. For example, in matrix multiplication, the number of columns in the first matrix must be equal to the number of rows in the second matrix.
try:
F = np.array([[1, 2], [3, 4]])
G = np.array([[5], [6], [7]])
H = np.dot(F, G)
except ValueError as e:
print(f"Error: {e}")
In this code, we try to multiply two matrices with incompatible shapes, and a ValueError
is raised.
NumPy arrays can have different data types. Using the wrong data type can lead to unexpected results. For example, performing integer division when floating - point results are expected.
I = np.array([[1, 2], [3, 4]], dtype = np.int32)
J = np.array([[5, 6], [7, 8]], dtype = np.int32)
K = I / J
print("Incorrect result due to integer division:")
print(K)
# Using floating - point data type
I_float = np.array([[1, 2], [3, 4]], dtype = np.float64)
J_float = np.array([[5, 6], [7, 8]], dtype = np.float64)
K_float = I_float / J_float
print("\nCorrect result with floating - point data type:")
print(K_float)
In the first case, we use integer data types, and the division results in integer values. In the second case, we use floating - point data types, which gives the correct result.
As shown in the previous section, using the appropriate data type can prevent unexpected results. For numerical computations, it is often a good idea to use floating - point data types such as np.float64
.
When working with large matrices, memory can become a bottleneck. NumPy provides functions to control memory usage, such as np.einsum()
which can be more memory - efficient than np.dot()
for some operations.
# Using np.einsum() for matrix multiplication
L = np.array([[1, 2], [3, 4]])
M = np.array([[5, 6], [7, 8]])
N = np.einsum('ij,jk->ik', L, M)
print("Matrix multiplication using np.einsum():")
print(N)
The np.einsum()
function uses Einstein summation notation to perform operations, which can be more memory - efficient in some cases.
NumPy is a powerful tool for linear algebra in Python. It provides a wide range of functions for working with vectors and matrices, solving systems of linear equations, computing eigenvalues and eigenvectors, and performing matrix decompositions. However, it is important to be aware of common pitfalls such as shape mismatches and incorrect data types. By following best practices such as using appropriate data types and managing memory effectively, you can use NumPy for linear algebra in real - world applications with confidence.