# Introduction to Python NumPy

NumPy is a powerful Python library for working with numerical data. It is primarily used for scientific computing and data analysis. NumPy provides a number of functions and operations that are faster and more efficient than the built-in Python methods. For example, you can use NumPy to perform element-wise operations on large arrays of data much faster than you could using Python’s built-in loops.

## Installing Numpy

To use NumPy in your Python project, you will first need to install it. This can be done using the pip package manager, which comes pre-installed with most Python distributions. Simply open a terminal and type:

``````pip install numpy
``````

or

``````pip3 install numpy
``````

for Mac/Linux.

## Importing NumPy

Once you have installed NumPy, you can import it into your Python project using the following import statement:

``````import numpy as np
``````

By convention, NumPy is usually imported with the alias `np`, but you can use any alias you like.

## NumPy Arrays

The main object in NumPy is the `ndarray`, or multidimensional array (n-dimensional). NumPy arrays are similar to Python lists, but they are more efficient and more powerful. You can create a NumPy array by passing a Python list or tuple to the `np.array` function:

``````# Create a 1D NumPy array from a Python list
array_1d = np.array([1, 2, 3, 4, 5])

# Create a 2D NumPy array from a Python list of lists
array_2d = np.array([[1, 2, 3], [4, 5, 6]])
``````

### Shape and Reshaping NumPy Arrays

NumPy arrays have a shape attribute that indicates the dimensions of the array. You can use the shape attribute to access the dimensions of an array, or you can use the `reshape` function to change the shape of an array.

Here’s a simple example:

``````import numpy as np

arr = np.array([[1, 2, 3, 4], [5, 6, 7, 8]])

print(arr.shape)
``````

Output:

``````(2, 4)
``````

I.e we have a 2 x 4 matrix: 2 rows of four columns each.

### Numpy Array Indexing and Slicing

Like Python lists, NumPy arrays can be indexed and sliced. You can access individual elements of a NumPy array using square brackets `[]` and the index of the element you want to access. For example:

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

# Access the first element of the array
first_element = array

# Access the last element of the array
last_element = array[-1]
``````

You can also slice NumPy arrays to get a subarray. For example:

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

# Get a subarray containing elements at indices 1 and 2
subarray = array[1:3]
``````

### NumPy Array Operations

NumPy provides many functions and methods for performing operations on arrays. You can perform basic arithmetic operations on arrays, such as addition, subtraction, multiplication, and division like so:

``````array_1 = np.array([1, 2, 3, 4, 5])
array_2 = np.array([6, 7, 8, 9, 10])

array_sum = array_1 + array_2

# Subtract two arrays element-wise
array_diff = array_1 - array_2

# Multiply two arrays element-wise
array_product = array_1 * array_2

# Divide two arrays element-wise
array_quotient = array_1 / array_2
``````

## Recommended Books for Learning Mathematics for Computing

As an Amazon affiliate I earn from qualifying purchases.

## NumPy Dot Product and Transpose

You can also perform more complex operations on arrays, such as finding the dot product of two arrays or transpose.

### Dot product of two arrays

Here’s how to calculate the dot product of two arrays with NumPy:

``````import numpy as np

# define two arrays
a = np.array([1, 2, 3])
b = np.array([4, 5, 6])

# calculate the dot product
dot_product = np.dot(a, b)

print(dot_product)  # Output: 32
``````

### Transpose of an array

Need to switch you rows for columns and vice versa? NumPy makes it easy:

``````import numpy as np

# define an array
a = np.array([[1, 2, 3], [4, 5, 6]])

# calculate the transpose
a_transpose = a.transpose()

print(a_transpose)   # Output: [[1 4]
#          [2 5]
#          [3 6]]
``````

## More NumPy Features

We have only scratched the surface of what’s possible with the powerful NumPy library. Below are brief descriptions of some of its other features which you might wish to explore.

NumPy supports “broadcasting”, which allows you to perform operations on arrays of different shapes. For example, you can add a scalar value to an array, or multiply an array by a vector.

### Linear Algebra

NumPy provides functions for performing linear algebra operations, such as finding the inverse of a matrix, calculating the determinant of a matrix, and solving linear equations.

### Statistical Functions

NumPy provides many functions for calculating statistical measures, such as mean, median, standard deviation, and percentiles.

### Boolean Indexing

You can use boolean indexing to select elements from a NumPy array based on a boolean condition. This can be useful for selecting specific rows or columns from a 2D array, or for selecting elements that meet certain criteria.