# Introduction To Linear Algebra Linear algebra, a sub-branch of mathematics, mainly engages the study of linear equations, vector operations, and matrices. This includes the study of introductory concepts like linear transformations, matrices, determinants, Eigenvalues, and vectors. We all know the significance of linear algebra in different fields like machine learning, deep learning models, physics, and mathematics problems. This article is all about the introduction of linear algebra in Python.

## Python for Linear Algebra Calculations

The Python programming language is widely recognized for its user-friendly interface and effortless implementation, which sets it apart from other languages. It boasts an extensive collection of modules, libraries, and functions that simplify comprehension and utilization. When it comes to performing linear algebra calculations, the Numpy library emerges as the go-to choice. Numpy facilitates calculations in the field of linear algebra.

Python is an open-source language and has a very large community support, so the language always remains up-to-date and trendy. The most important reason to use the Python language for linear algebra calculations is the popularity of this language in the machine learning and data science domains. This domain contains most of the calculations that are related to linear algebra. These are some reasons for its popularity.

## Vectors and Vectors Operations

When data is organized in a one-dimensional and orderly manner in Python, it is referred to as a vector. These vectors are commonly described as lists or tuples.

### Vector Implementation Using Python

The implementation of vectors becomes simpler by utilizing the Numpy library. You can easily convert a basic list or tuple into an array to represent vectors. Let us now look into the process of implementing vectors.

```import numpy as np
my_list = [2, 6, 4, 9, 1]
my_vector = np.array(my_list)
print(my_vector)
```

In this simple code, we imported the numpy module. The list is converted into an array and then printed as a vector.

### Scalar Multiplication and Addition in Python

After conve­rting a list of items or a tuple into an array, various operations can be performed on the numpy array, such as addition and multiplication. These operations are also known as scalar multiplication and addition. The first operation to try out is addition.

```a = np.array([1, 2, 3])
b = np.array([4, 5, 6])
result = a + b
print(result)
```

The result is correct!

Now, let’s try to implement scalar multiplication in Python.

```a = np.array([1, 7, 3])
scalar = 3
result = scalar * a
print(result)
```

Again, the results are correct!

### Dot Products of Vectors in Python

In the numpy library of Python, the np.dot() function is used to perform the dot product of the two vectors. Let’s try to implement this example.

```import numpy as np
vector_a = np.array([1, 2, 3])
vector_b = np.array([4, 5, 6])
dot_product = np.dot(vector_a, vector_b)
print(dot_product)
```

We got the correct results!

## Matrices and Matrix Operation in Python

When the data is represented in the form of rows and columns, this is called a matrix in linear algebra. The data is gathered in the shape of a rectangle. Uppercase letters like A, S, and C always stand in for this matrix, and lowercase letters like a11, s21, and c31 always stand in for the matrix’s components. This matrix is a part of many intricate problems like eigenvalues and linear transformation.

### Creating Matrices Using Python

To create a matrix in Python, one can utilize the nested list technique. Matrices are typically represented by arranging elements into rows and columns. Now, let’s proceed with implementing the code.

```matrix = [[1, 2, 3],
[4, 5, 6],
[7, 8, 9]]
print(matrix)
print(matrix)
```

In this code, a list of lists is created to represent a matrix. In the subsequent step, the array structure is used to access the elements of the matrix. The simplicity of this matrix structure facilitates various operations. Now, let’s examine the resulting outcome.

### Matrix Addition and Subtraction in Python

Matrix addition and subtraction can be easily achieved through the use of Python’s numpy library. To begin, one must import the numpy library and create two distinct matrices for both addition and subtraction operations. Following this, the sum of the two matrices can be stored in a single variable and subsequently printed for display. Let’s see the code and result.

```import numpy as np
matrix1 = np.array([[1, 2],
[3, 4]])

matrix2 = np.array([[5, 6],
[7, 8]])

result_subtraction = matrix1 - matrix2
print("Matrix Subtraction Result:")
print(result_subtraction)
```

In this way, we can also do the addition or subtraction of more than two matrices at the same time.

### Matrix Multiplication in Python

The matrix multiplication can be easily implemented using the numpy library. The np. dot() function is used to do the multiplication of two different matrices in Python. Let’s see the implementation.

```import numpy as np

matrix1 = np.array([[1, 2],
[3, 4]])

matrix2 = np.array([[5, 6],
[7, 8]])

result_multiplication = np.dot(matrix1, matrix2)
print("Matrix Multiplication Result:")
print(result_multiplication)
```

Till now we have discussed a lot about the basics and fundamental principles of linear algebra and their addition, subtraction, multiplication, etc. Now we will explore some complex mathematical problems based on linear algebra and learn about how they can be executed in Python.

## Linear Equations in Python

### Gaussian Elimination Method in Python

The Gaussian elimination method is commonly employed in Python programming to solve linear equations. To apply this method, the initial step is to import the numpy library for code execution. Subsequently, this technique aids in transforming the matrix into an upper triangular form. Back substitution is then utilized to determine the solution values. Now, let’s proceed with implementing this code.

```import numpy as np

def gaussian_elimination(A, b):
n = len(A)
augmented_matrix = np.hstack((A, b))

for i in range(n):
if augmented_matrix[i, i] == 0:
for k in range(i + 1, n):
if augmented_matrix[k, i] != 0:
augmented_matrix[[i, k]] = augmented_matrix[[k, i]]
break
else:
return None

pivot = augmented_matrix[i, i]
augmented_matrix[i] /= pivot

for j in range(i + 1, n):
factor = augmented_matrix[j, i]
augmented_matrix[j] -= factor * augmented_matrix[i]

x = np.zeros((n, 1))
for i in range(n - 1, -1, -1):
x[i] = augmented_matrix[i, -1]
for j in range(i + 1, n):
x[i] -= augmented_matrix[i, j] * x[j]

return x

A = np.array([[2, 1, -1],
[3, 2, 1],
[1, -1, 2]], dtype=float)

b = np.array([,
,
], dtype=float)

solution = gaussian_elimination(A, b)
if solution is not None:
print("Solution:")
print(solution)
else:
print("The system is not solvable.")
```

In this code, first we need to import numpy, and then we have to create one function to execute the method. Then we will check for the zero element. If there is no non-zero element present, then the system is not solvable and returns none. This process is a forward elimination. Then, we will do the backward substitution. After this, we will print the solution if it is solvable.

### Eigenvalues and Eigenvectors Implementation in Python

Eigenvalues and eigenvectors are part of complex linear equations. The eigenvectors are the scalar or constant factor, which is related to the square matrix in Python. The eigenvalues are represented with the help of the λ symbol. The vector that is related to this scalar component is known as the eigenvector. The eigenvector is a vector that holds significance in this context. It possesses the property of being non-zero, indicating its relevance and distinctiveness. Furthermore, this particular non-zero vector exhibits transformative behavior when subjected to corresponding eigenvalues.

```import numpy as np

def eigenvalue_eigenvector(matrix):

eigenvalues, eigenvectors = np.linalg.eig(matrix)
return eigenvalues, eigenvectors

A = np.array([[2, -1],
[4, 3]])

eigenvalues, eigenvectors = eigenvalue_eigenvector(A)

print("Eigenvalues:")
print(eigenvalues)

print("\nEigenvectors:")
print(eigenvectors)
```

​In this scenario, the numpy library is being imported for implementation. Subsequently, a function is defined to solve the matrix utilizing the np. linalg.e­ig() function, enabling us to determine both the eigenvalues and eigenvectors from the matrix. The obtained results are then printed. Now, let’s proceed with implementing the code.

By following this approach, one can easily determine the scalar values, namely eigenvalues and eigenvectors, from the given matrix.

### Linear Regression in Python

Linear regression is a very important part of many machine-learning models. The linear regression model is a simple way of representing the relationship between one dependent variable and one or more independent variables in Python. In many machine learning models, linear regression can be implemented using different libraries, like Numpy and the sci-kit-learn library. Let’s try to implement this method.

```import numpy as np
import matplotlib.pyplot as plt
from sklearn.linear_model import LinearRegression

X = np.array([1, 2, 3, 4, 5]).reshape(-1, 1)
y = np.array([2, 3, 4, 2.5, 5])

model = LinearRegression()
model.fit(X, y)

slope = model.coef_
intercept = model.intercept_
new_data = np.array([6, 7, 8]).reshape(-1, 1)
predictions = model.predict(new_data)

plt.scatter(X, y, label='Data')
plt.plot(new_data, predictions, color='red', label='Linear Regression')
plt.xlabel('X')
plt.ylabel('y')
plt.legend()
plt.grid(True)
plt.show()

print(f"Slope (Coefficient): {slope}")
print(f"Intercept: {intercept}")
```

The simple representation of the linear regression model can be done with the help of numpy, scikit-learn, and matplotlib in Python. The two different variables, i.e., x and y, are created. x is the independent variable, and y is the dependent variable or target variable. Then, this model is fitted to the linear regression model. Then the model is plotted for a visual description. Let’s see the results.

In this way, we can implement linear regression in Python.

## Application of Linear Algebra in Python

Linear algebra finds extensive applications in various machine-learning models. Solving linear equations becomes easier with the aid of Python libraries such as numpy, pandas, and matplotlib, which enable visual representations. Such calculations play a vital role in diverse domains like computer vision, deep learning, and machine learning.

Linear algebra plays a crucial role in various engineering and scientific problems by providing solutions to systems of linear equations. It is widely used in fields like data analysis and machine learning. For instance, when processing data, techniques such as Principal Component Analysis (PCA) can be applied using libraries like NumPy or SciPy for efficient computation. These libraries offer functions like numpy.linalg.solve() that effectively solve the aforementioned linear systems.

## Summary

Linear algebra is the most basic component of mathematics. Basic concepts like vectors and matrices are part of the linear algebra domain. Along with that, there are some popular methods/techniques available in the linear algebra domain, i.e., the gaussian method, the linear regression method, eigenvalues, and eigenvectors in Python. In this article, every technique or method is explained in detail. The numpy library plays a very vital role in the implementation of linear algebra in Python. I hope you will understand the concept and enjoy the article!

## References

Read the official documentation of the numpy library.