This article will explain what a matrix is and how to use them in the Python Programming Language with the NumPy library.

## What is a Matrix

In mathematics and computer programming, a matrix is a two-dimensional array of values.

It is a grid of columns and rows, with each position in the grid holding one of these values.

*It is an array because it’s a collection of elements with multiple elements, and it’s two-dimensional because the values exist at two coordinates (i.e., rows and columns).*

## Defining a Matrix using *NumPy*

*NumPy* is a Python library that adds support for large arrays and matrices and tools to manage them.

Here’s how to define a two-dimensional array, or matrix, in Python:

# Import the NumPy library import numpy # Define an array - in this case the height (cm) and age (years) of several people people = numpy.array([['Jim', 180, 20], ['Bob', 189, 18], ['Ann', 160, 21], ['Amy', 172, 25]]) print(people)

The above code defined the following matrix/array – each row is contained by **[]** (square brackets), and each value (or value in a column) is separated by a **,** (comma).

Jim | 180 | 20 |

Bob | 189 | 18 |

Ann | 160 | 21 |

Amy | 172 | 25 |

## Accessing Matrix Row Value

Matrix positions are *indexes* – numbers that give a column or row position in their order from left to right or top to bottom. *Indexes always start counting from 0 for the first position*.

So, to print Jim’s details (the first row), access the matrix row index **0**:

print(people[0])

Which will output:

['Jim', 180, 20]

Print Ann’s data from row index **2**:

print(people[2])

Which will output:

['Ann', 160, 21]

## Accessing Matrix Column Value

Column data can be retrieved from each row by also specifying the column index (which also starts counting at 0).

So, to retrieve the value of the first column in the first row (the person’s name):

print(people[0][0])

Which will return:

Jim

To retrieve the value of the 2nd row 3rd column (Bob’s age):

print(people[1][2])

Which will return:

18

Add/Delete/Update Rows

## Adding a Single Row to a Matrix

The NumPy *append* function will append a row to a given matrix:

people = numpy.append(people, [['Tim', 191, 26]], axis=0)

The *axis* specified (**0**) is the *row* – the first coordinate in a two-dimensional array.

The updated *people* array in this example will replace the existing *people* array.

## Adding Multiple Rows to a Matrix

In the above example, the array of data for Tim is contained in a separate set of square brackets – this is because the values to be appended are supplied as an array so that multiple rows can be added at once:

people = numpy.append(people, [['Tim', 191, 26], ['Pam', 195, 30]], axis=0)

## Deleting Rows

Like the NumPy *append()* function, the *delete()* function accepts an array of values (in this case, a list of the row indexes to delete) and an axis:

people = numpy.delete(people, [1, 3], axis=0)

Above, the rows at indexes 1 and 3 were deleted – leaving the following array:

[['Jim' '180' '20'] ['Ann' '160' '21'] ['Tim' '191' '26'] ['Pam' '195' '30']]

## Updating Rows

Ann grew rapidly after drinking too many energy drinks – so her height must be updated. To update a row, simply re-assign the value at the same index as the existing row:

people[2] = ['Ann', 197, 21]

Above, the record for Ann at index 2 will be replaced with the new values.

## Deleting Columns

The same *delete()* function used to delete rows is used to delete columns – simply change the index from **0** to **1** to specify the second coordinate of the two-dimensional array (i.e., the column):

people = numpy.delete(people, [[1, 2]], axis=1)

This will delete the columns at index **1** and **2** in the matrix, leaving only each person’s name.

## Adding Columns

To add a column, use the NumPy *insert* function.

To add a ‘favorite color’ column to the end of the example *people* matrix, the following would be used:

people = numpy.insert(people, [3], [['red'], ['blue'], ['green'], ['purple']], axis=1)

Again, the *people* array is replaced with an updated copy with the new column inserted.

The *axis* is specified as **1**, again because we are updating the *column,* which is the second array dimension.

The *insert()* function accepts several parameters – the array to be updated, followed by the index the column should be inserted at (in this case, the third column after *name*, *height*, and *age*), the values to be inserted into the column, and the previously mentioned axis.