Numpy (Numeric Python)
NumPy is the fundamental package for scientific computing with Python. It contains among other things:
Numpy Arrays can only store values of one datatype, if you insert more then one type values, then the complete array will be converted in the highest precise datatype, most of the time, it is string
 a powerful Ndimensional array object
 sophisticated (broadcasting) functions
 tools for integrating C/C++ and Fortran code
 useful linear algebra, Fourier transform, and random number capabilities
 Numeric Python
 Alternative to Python List: Numpy Array
 Calculations over entire arrays
 Easy and Fast
 Installation ● In the terminal: pip3 install numpy
 or python3 m pip install numpy
Introduction
In [6]: import numpy as np In [7]: np_height = np.array(height) In [8]: np_height Out[8]: array([ 1.73, 1.68, 1.71, 1.89, 1.79]) In [9]: np_weight = np.array(weight) In [10]: np_weight Out[10]: array([ 65.4, 59.2, 63.6, 88.4, 68.7]) In [11]: bmi = np_weight / np_height ** 2 In [12]: bmi Out[12]: array([ 21.852, 20.975, 21.75 , 24.747, 21.441])
First we imported the numpy package as np
then, we created a new numpy array using "np.array(LIST_NAME)"
Element Wise Calculation
In [6]: import numpy as np In [7]: np_height = np.array(height) In [8]: np_height Out[8]: array([ 1.73, 1.68, 1.71, 1.89, 1.79]) In [9]: np_weight = np.array(weight) In [10]: np_weight Out[10]: array([ 65.4, 59.2, 63.6, 88.4, 68.7]) In [11]: bmi = np_weight / np_height ** 2 In [12]: bmi Out[12]: array([ 21.852, 20.975, 21.75 , 24.747, 21.441]) #= 65.5/1.73 ** 2
Unlike normal lists in python or arrays in C++/JAVA , numpy arrays don't require indexing for complete list operation , They can be done directly as in line 11.

Comparision
In [13]: height = [1.73, 1.68, 1.71, 1.89, 1.79] In [14]: weight = [65.4, 59.2, 63.6, 88.4, 68.7] In [15]: weight / height ** 2 TypeError: unsupported operand type(s) for **: 'list' and 'int' In [16]: np_height = np.array(height) In [17]: np_weight = np.array(weight) In [18]: np_weight / np_height ** 2 Out[18]: array([ 21.852, 20.975, 21.75 , 24.747, 21.441]) 
Numpy: Remarks
 Numpy arrays: contain only one type
 Different types: different behavior!
In [19]: np.array([1.0, "is", True]) Out[19]: array(['1.0', 'is', 'True'], dtype=') #Numpy arrays: contain only one type #Different types: different behavior! In [20]: python_list = [1, 2, 3] In [21]: numpy_array = np.array([1, 2, 3]) In [22]: python_list + python_list Out[22]: [1, 2, 3, 1, 2, 3] In [23]: numpy_array + numpy_array Out[23]: array([2, 4, 6])
Numpy Arrays can only store values of one datatype, if you insert more then one type values, then the complete array will be converted in the highest precise datatype, most of the time, it is string
Numpy Subsetting
you can with regular Python lists. When you want to get elements from your array, for
example, you can again use square brackets. Suppose you want to get the `bmi` for the
second person, so at index 1. This will od the trick:
Specifically for Numpy, there's also another way to do list subsetting: using an array
of booleans. Say you want to get all BMI values in the bmi array that are over 23. A first
step is using the greater than sign, like this:
The result is a Numpy array containing booleans: True if the corresponding bmi is above 23,
False if it's below. Next, you can use this boolean array inside square brackets to do
subsetting. Only the elements in `bmi` that are above 23, so for which the corresponding
boolean value is True, is selected. There's only one BMI that's above 23, so we end up
with a Numpy array with a single value, that BMI.
Using the result of a comparison to make a selection of your data is a very common way to get surprising insights
In [24]: bmi Out[24]: array([ 21.852, 20.975, 21.75 , 24.747, 21.441]) In [25]: bmi[1] Out[25]: 20.975 In [26]: bmi > 23 Out[26]: array([False, False, False, True, False], dtype=bool) In [27]: bmi[bmi > 23] Out[27]: array([ 24.747]) 