Professional Documents
Culture Documents
NUMPY - Jupyter Notebook
NUMPY - Jupyter Notebook
Numpy
--> Numpy is a core library for scientific computing in python
--> It provides a High - performance multidimensional array object and tools for working these Arrays.
# 1D Array
import numpy as np
a = np.array([1,2,3])
a
In [5]:
# 2D Array
import numpy as np
a = np.array([(1,2,3),(4,5,6)])
a
Out[5]:
array([[1, 2, 3],
[4, 5, 6]])
1. Less Memory
2. Fast
3. Convinient
In [6]:
# Example 1
import numpy as np
import time
import sys
#for list
S = range(1000)
print(sys.getsizeof(5)*len(S))
#for Numpy
D = np.arange(1000)
print(D.size*D.itemsize)
28000
4000
In [8]:
import numpy as np
import time
import sys
SIZE = 1000000
L1 = range(SIZE)
L2 = range(SIZE)
A1 = np.arange(SIZE)
A2 = np.arange(SIZE)
# For List
start = time.time()
result = [(x,y) for x,y in zip(L1,L2)]
print((time.time()-start)*1000)
# For Numpy
start = time.time()
result = A1+A2
print((time.time()-start)*1000)
172.74856567382812
78.11713218688965
# Numpy Operations
1. Find the Dimension of the array
2. Find the bytesize of an array
3. Find the datatype of the elements
In [9]:
# Dimension of an Array
import numpy as np
a = np.array([1,2,3])
a.ndim
Out[9]:
In [10]:
import numpy as np
a = np.array([(1,2,3),(4,5,6),(7,8,9)])
a.ndim
Out[10]:
In [14]:
import numpy as np
a = np.array([1,2,3])
a.itemsize
Out[14]:
In [15]:
import numpy as np
a = np.array([1,2,3])
a.dtype
Out[15]:
dtype('int32')
In [20]:
# Size of an array
import numpy as np
a = np.array([1,2,3,4])
a.size
Out[20]:
In [22]:
# Shape of an Array
import numpy as np
a = np.array([(1,2,3,4,5),(6,7,8,9,10)])
a.shape
Out[22]:
(2, 5)
# Reshaping
In [120]:
import numpy as np
a = np.array([(1,2,3),(4,5,6),(7,8,9),(10,11,12)])
a
Out[120]:
array([[ 1, 2, 3],
[ 4, 5, 6],
[ 7, 8, 9],
[10, 11, 12]])
In [122]:
import numpy as np
a = np.array([(1,2,3),(4,5,6),(7,8,9),(10,11,12)])
a.reshape(3,4)
Out[122]:
array([[ 1, 2, 3, 4],
[ 5, 6, 7, 8],
[ 9, 10, 11, 12]])
In [124]:
import numpy as np
a = np.array([(1,2,3),(4,5,6),(7,8,9),(10,11,12)])
a.reshape(6,2)
Out[124]:
array([[ 1, 2],
[ 3, 4],
[ 5, 6],
[ 7, 8],
[ 9, 10],
[11, 12]])
# Indexing
In [179]:
import numpy as np
a = np.array([(1,2,3),(4,5,6)])
a[0]
Out[179]:
array([1, 2, 3])
In [180]:
a[1]
Out[180]:
array([4, 5, 6])
In [183]:
a[0,2]
Out[183]:
In [184]:
a[1,0:2]
Out[184]:
array([4, 5])
In [185]:
a[0:]
Out[185]:
array([[1, 2, 3],
[4, 5, 6]])
In [186]:
a[:1]
Out[186]:
array([[1, 2, 3]])
In [188]:
a[0:,2]
Out[188]:
array([3, 6])
In [190]:
import numpy as np
a = np.array([(1,2,3),(4,5,6)])
a[:1,2:] # :1 rows upto 1-1 i.e., 0 indexed row and 2: In that 0
Out[190]:
array([[3]])
# Slicing
In [28]:
import numpy as np
a = np.array([(1,2,3,4),(5,6,7,8)])
a[0,2]
Out[28]:
In [29]:
import numpy as np
a = np.array([(1,2,3,4),(5,6,7,8)])
a[0:,3]
Out[29]:
array([4, 8])
In [30]:
import numpy as np
a = np.array([(1,2,3,4),(5,6,7,8),(9,10,11,12)])
a[:]
Out[30]:
array([[ 1, 2, 3, 4],
[ 5, 6, 7, 8],
[ 9, 10, 11, 12]])
In [31]:
import numpy as np
a = np.array([(1,2,3,4),(5,6,7,8),(9,10,11,12)])
a[0:2,3]
Out[31]:
array([4, 8])
In [35]:
import numpy as np
a = np.array([(1,2,3,4),(5,6,7,8),(9,10,11,12)])
a[1:,2]
Out[35]:
array([ 7, 11])
In [39]:
# linspace
import numpy as np
a = np.linspace(1,3,5) # It gives 5 values between 1 and 3
a
Out[39]:
In [40]:
import numpy as np
a = np.linspace(1,5,10) # It gives 10 values between 1 and 5
a
Out[40]:
# Min
import numpy as np
a = np.array([1,2,3,4])
a.min()
Out[41]:
In [42]:
# Max
import numpy as np
a = np.array([1,2,3,4])
a.max()
Out[42]:
In [44]:
# Sum
import numpy as np
a = np.array([1,2,3,4])
a.sum()
Out[44]:
10
In [49]:
# Mean
import numpy as np
a = np.array([1,2,3,4])
a.mean()
Out[49]:
2.5
# Square Root
In [53]:
import numpy as np
a = np.array([1,2,3])
np.sqrt(a)
Out[53]:
# Variance
In [61]:
import numpy as np
a = np.array([1,2,3])
np.var(a) # OR a.var()
Out[61]:
0.6666666666666666
In [68]:
import numpy as np
a = np.array([1,2,3])
np.var(a,axis = 0) # axis = 0 for columns
Out[68]:
0.6666666666666666
In [69]:
import numpy as np
a = np.array([(1,2,3),(4,5,6)])
np.var(a,axis = 0)
Out[69]:
In [70]:
import numpy as np
a = np.array([(1,2,3),(4,5,6)])
np.var(a,axis = 1)
Out[70]:
array([0.66666667, 0.66666667])
# Standard Deviation
In [72]:
import numpy as np
a = np.array([1,2,3])
np.std(a)
Out[72]:
0.816496580927726
In [73]:
import numpy as np
a = np.array([(1,2,3),(4,5,6)])
np.std(a)
Out[73]:
1.707825127659933
In [155]:
# Addition
import numpy as np
a = np.array([(1,2,3),(4,5,6)])
b = np.array([(1,2,3),(4,5,6)])
a+b
Out[155]:
array([[ 2, 4, 6],
[ 8, 10, 12]])
In [156]:
a*10
Out[156]:
In [79]:
# Subtraction
import numpy as np
a = np.array([(1,2,3),(4,5,6)])
b = np.array([(1,2,3),(4,5,6)])
a-b
Out[79]:
array([[0, 0, 0],
[0, 0, 0]])
In [80]:
# Multiplication
import numpy as np
a = np.array([(1,2,3),(4,5,6)])
b = np.array([(1,2,3),(4,5,6)])
a*b
Out[80]:
array([[ 1, 4, 9],
[16, 25, 36]])
In [81]:
# Division
import numpy as np
a = np.array([(1,2,3),(4,5,6)])
b = np.array([(1,2,3),(4,5,6)])
a/b
Out[81]:
import numpy as np
a = np.array([(1,2,3),(4,5,6)])
b = np.array([(1,2,3),(4,5,6)])
np.vstack((a,b))
Out[84]:
array([[1, 2, 3],
[4, 5, 6],
[1, 2, 3],
[4, 5, 6]])
In [1]:
import numpy as np
a = np.array([(1,2,3),(4,5,6)])
b = np.array([(1,2,3),(4,5,6)])
np.vstack(a)
Out[1]:
array([[1, 2, 3],
[4, 5, 6]])
In [92]:
import numpy as np
a=np.array([(1,2,3),(4,5,6)])
b=np.array([(1,2,3),(4,5,6)])
np.hstack((a,b))
Out[92]:
array([[1, 2, 3, 1, 2, 3],
[4, 5, 6, 4, 5, 6]])
In [94]:
import numpy as np
a=np.array([(1,2,3),(4,5,6)])
b=np.array([(1,2,3),(4,5,6)])
np.hstack(a)
Out[94]:
array([1, 2, 3, 4, 5, 6])
In [96]:
import numpy as np
a=np.array([(1,2,3),(4,5,6)])
a.ravel()
Out[96]:
array([1, 2, 3, 4, 5, 6])
In [328]:
b = np.array([[1,2,3],[4,5,6]])
b.flatten()
Out[328]:
array([1, 2, 3, 4, 5, 6])
In [329]:
#Ravel returns reference/view of original array whereas flatten returns copy of original ar
#the array you would notice that the value of original array also changes by using ravel.
import numpy as np
a = np.array([(1,2,3,4),(3,1,4,2)])
# Note here that value of original array 'a' at also a[0][0] becomes 1000
print(a)
# Note that by changing value of c there is no affect on value of original array 'a'
print(a)
Original array:
[[1 2 3 4]
[3 1 4 2]]
Dimension of array-> 2
[1 2 3 4 3 1 4 2]
[1000 2 3 4 3 1 4 2]
[[1000 2 3 4]
[ 3 1 4 2]]
Dimension of array-> 1
[1000 2 3 4 3 1 4 2]
[0 2 3 4 3 1 4 2]
[[1000 2 3 4]
[ 3 1 4 2]]
Dimension of array-> 1
# axis
'axis 0' for columns
In [162]:
import numpy as np
a = np.array([(1,2,3),(4,5,6)])
a.sum(axis = 0) # columns will be added 1+4, 2+5, 3+6
Out[162]:
array([5, 7, 9])
In [164]:
import numpy as np
a = np.array([(1,2,3),(4,5,6)])
a.sum(axis = 1) # Rows will be added 1+2+3, 4+5+6
Out[164]:
array([ 6, 15])
In [108]:
# Sine Function
import numpy as np
import matplotlib.pyplot as plt
x = np.arange(0, 3 * np.pi, 0.1) # 0.1 for to get clear sinusoidal waveform, if we increa
y = np.sin(x)
plt.plot(x,y)
plt.title('Sine Function')
plt.show()
In [112]:
# Cosine Function
import numpy as np
import matplotlib.pyplot as plt
x = np.arange(0, 3 * np.pi, 0.1) # 0.1 for to get clear sinusoidal waveform, if we increa
y = np.cos(x)
plt.plot(x,y)
plt.title('Cosine Function')
plt.show()
In [165]:
# tan Function
import numpy as np
import matplotlib.pyplot as plt
x = np.arange(0, 3 * np.pi, 0.1) # 0.1 for to get clear sinusoidal waveform, if we increa
y=np.tan(x)
plt.plot(x,y)
plt.title('Tangential Function')
plt.show()
# eX (Exponential Function)
In [117]:
import numpy as np
a = np.array([1,2,3])
np.exp(a)
Out[117]:
In [3]:
import numpy as np
a = np.array([(1,2,3),(4,5,6)])
np.exp(a)
Out[3]:
In [131]:
# For log e
import numpy as np
a = np.array([1,2,3])
np.log(a)
Out[131]:
In [133]:
# For log10
import numpy as np
a = np.array([1,2,3])
np.log10(a)
Out[133]:
# Random Numbers
Random sampling (numpy.random)
Permutations
Distributions
In [138]:
import numpy as np
a = np.random.rand(10)
a
Out[138]:
In [140]:
import numpy as np
a = np.random.rand(2,10)
a
Out[140]:
In [148]:
import numpy as np
a = np.random.randn(10) # randn for Gaussian noise
a
Out[148]:
# Using ones
In [152]:
import numpy as np
np.ones(5)
Out[152]:
In [157]:
import numpy as np
np.ones((10,2))
Out[157]:
array([[1., 1.],
[1., 1.],
[1., 1.],
[1., 1.],
[1., 1.],
[1., 1.],
[1., 1.],
[1., 1.],
[1., 1.],
[1., 1.]])
In [288]:
Out[288]:
array([[1., 0.],
[1., 2.]])
# Using np.c_
Translates slice objects to concatenation along the second axis.
In [173]:
import numpy as np
np.c_[np.array([1,2,3]), np.array([4,5,6])]
Out[173]:
array([[1, 4],
[2, 5],
[3, 6]])
In [175]:
import numpy as np
np.c_[np.array([[1,2,3]]), np.array([[4,5,6]])]
Out[175]:
array([[1, 2, 3, 4, 5, 6]])
In [176]:
import numpy as np
np.c_[np.array([[1,2,3]]),0, 0, np.array([[4,5,6]])]
Out[176]:
array([[1, 2, 3, 0, 0, 4, 5, 6]])
In [178]:
import numpy as np
np.c_[np.array([1,2,3,4]), np.array([5,6,7,8]), np.array([9,10,11,12])]
Out[178]:
array([[ 1, 5, 9],
[ 2, 6, 10],
[ 3, 7, 11],
[ 4, 8, 12]])
# Boolean Indexing
localhost:8888/notebooks/NUMPY .ipynb 20/32
1/8/2020 NUMPY - Jupyter Notebook
Let’s consider an example where we have some data in an array and an array of names with duplicates. I’m
going to use here the randn function in numpy.random to generate some random normally distributed data
In [192]:
Out[192]:
In [195]:
names == 'Sai'
Out[195]:
In [196]:
names!='Hari'
Out[196]:
In [205]:
data = np.random.randn(7,4)
data
Out[205]:
In [206]:
data[names == 'Ravi']
Out[206]:
In [211]:
data1 = np.array([(1,2,3),(4,5,6),(7,8,9),(10,11,12),(13,14,15),(16,17,18),(19,20,21)])
data1
Out[211]:
array([[ 1, 2, 3],
[ 4, 5, 6],
[ 7, 8, 9],
[10, 11, 12],
[13, 14, 15],
[16, 17, 18],
[19, 20, 21]])
In [212]:
data1[names == 'Hari']
Out[212]:
array([[ 4, 5, 6],
[16, 17, 18],
[19, 20, 21]])
In [213]:
data1[names!='Ravi']
Out[213]:
array([[ 1, 2, 3],
[ 4, 5, 6],
[10, 11, 12],
[16, 17, 18],
[19, 20, 21]])
# Fancy Indexing
Fancy indexing is a term adopted by NumPy to describe indexing using integer arrays.
In [216]:
a = np.empty((8, 4))
a
Out[216]:
In [219]:
a = np.empty((8, 4))
for i in range(8):
a[i] = i
a
Out[219]:
In [221]:
a[[4, 3, 0, 6]]
Out[221]:
In [222]:
a = np.arange(32)
a
Out[222]:
In [223]:
a = np.arange(32).reshape((8,4))
a
Out[223]:
array([[ 0, 1, 2, 3],
[ 4, 5, 6, 7],
[ 8, 9, 10, 11],
[12, 13, 14, 15],
[16, 17, 18, 19],
[20, 21, 22, 23],
[24, 25, 26, 27],
[28, 29, 30, 31]])
In [226]:
# From 1Row, 5Row, 7Row, 2Row take values of 0indexed, 3 indexed, 1 indexed, 2indexed value
Out[226]:
In [227]:
Out[227]:
array([[ 0, 3, 1, 2],
[ 4, 7, 5, 6],
[ 8, 11, 9, 10],
[12, 15, 13, 14],
[16, 19, 17, 18],
[20, 23, 21, 22],
[24, 27, 25, 26],
[28, 31, 29, 30]])
In [229]:
Out[229]:
array([[ 4, 7, 5, 6],
[20, 23, 21, 22],
[28, 31, 29, 30],
[ 8, 11, 9, 10]])
In [230]:
import numpy as np
a = np.arange(15).reshape((3, 5))
a
Out[230]:
array([[ 0, 1, 2, 3, 4],
[ 5, 6, 7, 8, 9],
[10, 11, 12, 13, 14]])
In [233]:
a = np.arange(16).reshape(4,4)
a
Out[233]:
array([[ 0, 1, 2, 3],
[ 4, 5, 6, 7],
[ 8, 9, 10, 11],
[12, 13, 14, 15]])
In [234]:
a = np.arange(16).reshape(2,2,2,2)
a
Out[234]:
array([[[[ 0, 1],
[ 2, 3]],
[[ 4, 5],
[ 6, 7]]],
[[[ 8, 9],
[10, 11]],
[[12, 13],
[14, 15]]]])
In [238]:
a = np.array([[1,2,3]])
a
Out[238]:
array([[1, 2, 3]])
In [239]:
a.swapaxes(0,1)
Out[239]:
array([[1],
[2],
[3]])
In [242]:
a = np.array([[1,2,3],[4,5,6]])
a
Out[242]:
array([[1, 2, 3],
[4, 5, 6]])
In [246]:
Out[246]:
array([[1, 4],
[2, 5],
[3, 6]])
In [248]:
b = np.array([[[0,1],[2,3]],[[4,5],[6,7]]])
b
Out[248]:
array([[[0, 1],
[2, 3]],
[[4, 5],
[6, 7]]])
In [253]:
b.swapaxes(0,1)
Out[253]:
array([[[0, 1],
[4, 5]],
[[2, 3],
[6, 7]]])
In [252]:
b.swapaxes(0,2)
Out[252]:
array([[[0, 4],
[2, 6]],
[[1, 5],
[3, 7]]])
In [250]:
b.swapaxes(1,2)
Out[250]:
array([[[0, 2],
[1, 3]],
[[4, 6],
[5, 7]]])
In [269]:
a = np.arange(16).reshape(4,2,2)
a
Out[269]:
array([[[ 0, 1],
[ 2, 3]],
[[ 4, 5],
[ 6, 7]],
[[ 8, 9],
[10, 11]],
[[12, 13],
[14, 15]]])
In [270]:
a = np.arange(16).reshape(2,2,4)
a
Out[270]:
array([[[ 0, 1, 2, 3],
[ 4, 5, 6, 7]],
[[ 8, 9, 10, 11],
[12, 13, 14, 15]]])
In [271]:
a.transpose(1,0,2)
Out[271]:
array([[[ 0, 1, 2, 3],
[ 8, 9, 10, 11]],
[[ 4, 5, 6, 7],
[12, 13, 14, 15]]])
In [274]:
a.transpose(2,0,1)
Out[274]:
array([[[ 0, 4],
[ 8, 12]],
[[ 1, 5],
[ 9, 13]],
[[ 2, 6],
[10, 14]],
[[ 3, 7],
[11, 15]]])
In [275]:
x=np.arange(18).reshape(2,9)
x
Out[275]:
array([[ 0, 1, 2, 3, 4, 5, 6, 7, 8],
[ 9, 10, 11, 12, 13, 14, 15, 16, 17]])
In [276]:
y=np.arange(18).reshape(9,2)
y
Out[276]:
array([[ 0, 1],
[ 2, 3],
[ 4, 5],
[ 6, 7],
[ 8, 9],
[10, 11],
[12, 13],
[14, 15],
[16, 17]])
In [285]:
a = [1,2,3,4]
print(a.append(5))
None
In [286]:
a.append(5)
a
Out[286]:
[1, 2, 3, 4, 5, 5]
# cumsum
In [290]:
a = np.array([1,2,3])
a.cumsum()
Out[290]:
In [291]:
Out[291]:
In [293]:
a.cumsum(axis = 0)
Out[293]:
array([[ 0, 1, 2],
[ 3, 5, 7],
[ 9, 12, 15]], dtype=int32)
In [295]:
a.cumsum(axis = 1)
Out[295]:
array([[ 0, 1, 3],
[ 3, 7, 12],
[ 6, 13, 21]], dtype=int32)
In [297]:
# cumprod
a.cumprod(axis = 0)
Out[297]:
array([[ 0, 1, 2],
[ 0, 4, 10],
[ 0, 28, 80]], dtype=int32)
In [299]:
a.cumprod(axis = 1)
Out[299]:
array([[ 0, 0, 0],
[ 3, 12, 60],
[ 6, 42, 336]], dtype=int32)
In [302]:
a = np.random.rand(2,5)
a
Out[302]:
In [305]:
a.sort()
a
Out[305]:
In [309]:
a.sort(1)
a
Out[309]:
In [312]:
a = np.array([[12,15],[10,1]])
a
Out[312]:
array([[12, 15],
[10, 1]])
In [320]:
np.argmin(a)
Out[320]:
In [321]:
np.argmax(a)
Out[321]:
In [322]:
b =np.array([[25,6,8],[5,6,9]])
b
Out[322]:
array([[25, 6, 8],
[ 5, 6, 9]])
In [323]:
np.argmin(b)
Out[323]:
In [324]:
np.argmax(b)
Out[324]:
In [314]:
a.sort(axis = 0)
a
Out[314]:
array([[10, 1],
[12, 15]])
In [315]:
a.sort(axis = 1)
a
Out[315]:
array([[ 1, 10],
[12, 15]])
In [316]:
x = np.array([[1,2,3],[4,5,6]])
x
Out[316]:
array([[1, 2, 3],
[4, 5, 6]])
In [319]:
np.dot(x,np.ones(3))
Out[319]:
In [326]:
Out[326]:
(array([[-0.24253563, -0.9701425 ],
[-0.9701425 , 0.24253563]]),
array([[-4.12310563, -5.33578375, -6.54846188],
[ 0. , -0.72760688, -1.45521375]]))
In [331]:
Out[331]:
array([[ 1, 2, 3],
[ 4, 5, 6],
[ 7, 8, 9],
[10, 11, 12]])
In [333]:
Out[333]:
array([[ 1, 2, 3, 7, 8, 9],
[ 4, 5, 6, 10, 11, 12]])
In [334]:
import numpy as np
# splitting a string
print(np.char.join('-', 'geeks'))
# splitting a string
print(np.char.join(['-', ':'], ['geeks', 'for']))
g-e-e-k-s
['g-e-e-k-s' 'f:o:r']
In [ ]: