For me, NumPy is a Python list on steroids. You can use it to create multidimensional arrays and matrices.

The convention is to import it as follows:

**import numpy as np**
To create an array of numbers between 0 and 9, you could use the following command:

**x = range(9)**
To convert that list into a NumPy array, you can write:

**x = np.array(range(9))**
And to make you life easier, there is a shorthand for the above command:

**x = np.arange(9)**
So far, we have been creating one dimensional array. However, there are ways to reshape the arrays. The reshape() method when applied on an array, it returns a reshaped version of it without changing the original object. To reshape the original object itself, then use resize() instead.

**y = x.reshape(2,5)**
The above command create a 2-dimensional array of 2 rows and 5 columns. You can create a much dimensional arrays as you want. See the command below for a 3*4*5 array.

**y = np.arange(3*4*5).reshape(3,4,5)**
The mathematical operations '+', '-', '/' and '*' are applied elementwise.

**x = np.arange(10)**

**# To multiply each element of x by 10**
**y = x + 10**

**# To multiply each element of x by itself**
**y = x + x**
To do a Matrix Multiplication though:

**# Create a 3 * 5 Matrix**
**A = np.arange(15).reshape(3,5)**

**# Create a 5 * 2 Matrix**
**B = np.arange(10).reshape(5,2)**

**# Dot product gives you a 3 * 2 Matrix**
**y = y = np.dot(A, B)**
Just like lists, you can get parts of arrays

For original lists:

**A = range(10)**
**A[2:5] # [2, 3, 4]**
For NumPy Arrays

**B = arange(10)**
**B[2:5] # array([2, 3, 4])**
However, you can set some elements of the array as follows

**B[2:5] = 1337**
But, you cannot do the same to lists.

**A[2:5] = 1337 # TypeError: can only assign an iterable**
For statisticians, there are also the following functions

**x = np.arange(5) + 1**
**x.mean() # 3.0**
**x.max() # 5**
**x.min() # 1**
**x.std() # 1.414**
You can also access elements of the array using start, stop and a step:

**x = np.arange(10)**
**x[2:7:2] # array([2, 4, 6])**
Or access specific elements, let's say elements 1, 5 and 6

**x[[1,5,6]] # array([1, 5, 6])**
Similar to reshape() and resize(), ravel() converts a multidimensional array into a one-dimensional array, while transpose() turns rows into columns and vice versa.

If you program in R, you will not miss their way of accessing elements of array that meet a certain condition.

**x = np.arange(10)**
**x[x>4] # array([5, 6, 7, 8, 9])**
**x[x%2 == 1] # array([1, 3, 5, 7, 9])**
If you are having an array of elements that are either True or False.

**x = np.array([True, False, True, True])**

**x.all() # Only True if all elements are True**
**x.any() # Only True if any elements are True**
Finally, there is a repeat() that repeats each element of the array n times

**x = np.array([1, 2])**
**x.repeat(3) # array([1, 1, 1, 2, 2, 2])**
That's all folks for today.

Check

the following tutorial for more information.