In this lesson, we will be working through various operations included in the NumPy library.

Throughout this lesson, we will be assuming that the `import numpy as np`

command has already been run.

## The Array Used In This Lesson

For this lesson, I will be working with an array of length 4 created using `np.arange`

in all of the examples.

If you'd like to compare my array with the outputs used in this lesson, here is how I created and printed the array:

```
arr = np.arange(4)
arr
```

The array values are below.

`array([0, 1, 2, 3])`

## How To Perform Arithmetic In Python Using Number

NumPy makes it very easy to perform arithmetic with arrays. You can either perform arithmetic using the array and a single number, or you can perform arithmetic between two NumPy arrays.

We explore each of the major mathematical operations below.

### Addition

When adding a single number to a NumPy array, that number is added to each element in the array. An example is below:

```
2 + arr
#Returns array([2, 3, 4, 5])
```

You can add two NumPy arrays using the `+`

operator. The arrays are added on an element-by-element basis (meaning the first elements are added together, the second elements are added together, and so on).

An example is below.

```
arr + arr
#Returns array([0, 2, 4, 6])
```

### Subtraction

Like addition, subtraction is performed on an element-by-element basis for NumPy arrays. You can find example for both a single number and another NumPy array below.

```
arr - 10
#Returns array([-10, -9, -8, -7])
arr - arr
#Returns array([0, 0, 0, 0])
```

### Multiplication

Multiplication is also performed on an element-by-element basis for both single numbers and NumPy arrays.

Two examples are below.

```
6 * arr
#Returns array([ 0, 6, 12, 18])
arr * arr
#Returns array([0, 1, 4, 9])
```

### Division

By this point, you're probably not surprised to learn that division performed on NumPy arrays is done on an element-by-element basis. An example of dividing `arr`

by a single number is below:

```
arr / 2
#Returns array([0. , 0.5, 1. , 1.5])
```

Division does have one notable exception compared to the other mathematical operations we have seen in this lesson. Since we cannot divide by zero, doing so will cause the corresponding field to be populated by a `nan`

value, which is Python shorthand for "Not A Number". Jupyter Notebook will also print a warning that looks like this:

`RuntimeWarning: invalid value encountered in true_divide`

An example of dividing by zero is with a NumPy array is shown below.

```
arr / arr
#Returns array([nan, 1., 1., 1.])
```

We will learn how to deal with `nan`

values in more detail later in this course.

## Complex Operations in NumPy Arrays

Many operations cannot simply be performed by applying the normal syntax to a NumPy array. In this section, we will explore several mathematical operations that have built-in methods in the NumPy library.

### How To Calculate Square Roots Using NumPy

You can calculate the square root of every element in an array using the `np.sqrt`

method:

```
np.sqrt(arr)
#Returns array([0. , 1. , 1.41421356, 1.73205081])
```

Many other examples are below (note that you will not be tested on these, but it is still useful to see the capabilities of NumPy):

```
np.exp(arr)
#Returns e^element for every element in the array
np.sin(arr)
#Calculate the trigonometric sine of every value in the array
np.cos(arr)
#Calculate the trigonometric cosine of every value in the array
np.log(arr)
#Calculate the base-ten logarithm of every value in the array
```

## Moving On

In this lesson, we explored the various methods and operations available in the NumPy Python library. We will text your knowledge of these concepts in the practice problems presented next.