Numpy Complete Material
Numpy Complete Material
although array list and tuple all are used to hold the any data but the process time takes for array operation is
comparatively very less
In [2]:
import numpy as np
In [3]:
In [26]:
start_time=process_time()
end_time=process_time()
print(end_time-start_time)
1.578125
In [25]:
start_time=process_time()
array1+=10
end_time=process_time()
print(end_time-start_time)
0.015625
Conclusion :--> required time for operation with array is very less thats why we prefer to array against list or
tuple
In [31]:
list1=[1,2,3,4,5]
print(list1)
print(type(list1))
[1, 2, 3, 4, 5]
<class 'list'>
In [32]:
Array1=np.array([1,2,3,4,5])
print(Array1)
print(type(Array1))
[1 2 3 4 5]
<class 'numpy.ndarray'>
In [93]:
# arange function
x=np.arange(1,10,2) # from 1 to 10 with step size 2
print(x)
[1 3 5 7 9]
In [94]:
In [99]:
list1=[[1,2,3],[4,5,6],[7,8,9]]
my_matrix=np.array(list1)
print(my_matrix)
[[1 2 3]
[4 5 6]
[7 8 9]]
In [95]:
In [96]:
# random values follows std normal distribution means whose mean is zero and std dev is 1
x=np.random.randn(5)
print(x)
In [97]:
# random values follows std normal distribution means whose mean is zero and std dev is 1
x=np.random.randn(3,4)
print(x)
In [98]:
#np.random.randint
x=np.random.randint(10,100,(3,4))
print(x)
[[93 25 84 86]
[57 74 44 25]
[97 46 47 29]]
In [40]:
# now create two dimentional array (with defining values at float values)
array2=np.array([(1,2,3,4),(5,6,7,8)],dtype=float)
print(array2)
array2.shape
[[1. 2. 3. 4.]
[5. 6. 7. 8.]]
Out[40]:
(2, 4)
In [155]:
print(arr)
[[[1 2 3]
[4 5 6]]
[[1 2 3]
[4 5 6]]]
In [160]:
print(arr)
print('number of dimensions :', arr.ndim)
[[[[[1 2 3 4]]]]]
number of dimensions : 5
In this array the innermost dimension (5th dim) has 4 elements, the 4th dim has 1 element that is the vector,
the 3rd dim has 1 element that is the matrix with the vector, the 2nd dim has 1 element that is 3D array and
1st dim has 1 element that is a 4D array.
In [44]:
[[0. 0. 0. 0. 0.]
[0. 0. 0. 0. 0.]
[0. 0. 0. 0. 0.]
[0. 0. 0. 0. 0.]]
In [45]:
[[1. 1. 1. 1. 1.]
[1. 1. 1. 1. 1.]
[1. 1. 1. 1. 1.]
[1. 1. 1. 1. 1.]]
In [46]:
x=np.full((4,4),5)
print(x)
[[5 5 5 5]
[5 5 5 5]
[5 5 5 5]
[5 5 5 5]]
In [48]:
# creating identity matrix- all the diogonal element will be one and rest all the values
x=np.eye(4)
print(x)
[[1. 0. 0. 0.]
[0. 1. 0. 0.]
[0. 0. 1. 0.]
[0. 0. 0. 1.]]
In [50]:
x=np.random.random((3,4))
print(x)
all the values you will get here will be in the range of 0 to 1
In [52]:
[[37 47 35 38]
[13 31 94 24]
[75 93 49 38]]
In [54]:
In [55]:
array1=np.asarray(list1)
print(array1)
type(array1)
[10 20 30 40 50]
Out[55]:
numpy.ndarray
In [56]:
In [61]:
# shape
x=np.random.randint(10,99,(4,5))
print(x)
print("Shape of the array:\n ",x.shape)
[[74 11 89 32 93]
[95 25 48 50 75]
[47 52 63 36 52]
[78 39 15 84 37]]
Shape of the array:
(4, 5)
In [62]:
x.ndim
Out[62]:
In [64]:
x.size
Out[64]:
20
In [65]:
x.dtype
Out[65]:
dtype('int32')
In [100]:
myarr=np.random.randint(10,20,10)
print(myarr)
[19 15 19 16 11 18 14 19 16 18]
In [101]:
myarr.max()
Out[101]:
19
In [102]:
Out[102]:
In [103]:
myarr.min()
Out[103]:
11
In [104]:
Out[104]:
In [66]:
list1=[1,2,3,4,5]
list2=[6,7,8,9,10]
list1+list2 #==> instead of adding this PLus operator will concatenate the two list
Out[66]:
[1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
In [80]:
a=np.random.randint(10,20,(3,3))
b=np.random.randint(20,30,(3,3))
print(a)
print(b)
[[16 18 11]
[16 18 10]
[15 13 10]]
[[25 29 29]
[20 20 26]
[26 29 27]]
In [81]:
[[41 47 40]
[36 38 36]
[41 42 37]]
In [82]:
[[ -9 -11 -18]
[ -4 -2 -16]
[-11 -16 -17]]
In [83]:
In [84]:
In [135]:
arr=np.arange(0,11)
arr
Out[135]:
array([ 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10])
In [137]:
arr+arr
Out[137]:
In [138]:
arr/arr
C:\Users\SSRVC\AppData\Local\Temp\ipykernel_18212\1862401812.py:1: Runtime
Warning: invalid value encountered in true_divide
arr/arr
Out[138]:
array([nan, 1., 1., 1., 1., 1., 1., 1., 1., 1., 1.])
In [139]:
# since there is zero values at first place at both array which make no sence with math p
#in normal python it could be error where as in array function it shows nan values at tha
In [140]:
In [141]:
arr
Out[141]:
array([ 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10])
In [142]:
np.sqrt(arr)
Out[142]:
In [143]:
np.sin(arr)
Out[143]:
In [144]:
np.log(arr)
C:\Users\SSRVC\AppData\Local\Temp\ipykernel_18212\3120950136.py:1: Runtime
Warning: divide by zero encountered in log
np.log(arr)
Out[144]:
In [145]:
# since log of zero is infinity but still it giving result and infity at its place which
In [146]:
arr
Out[146]:
array([ 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10])
In [147]:
arr.min()
Out[147]:
In [148]:
arr.max()
Out[148]:
10
In [149]:
arr.mean()
Out[149]:
5.0
In [150]:
arr.std()
Out[150]:
3.1622776601683795
In [151]:
arr.var()
Out[151]:
10.0
In [152]:
arr=np.random.randint(1,10,(5,5))
arr
Out[152]:
array([[1, 9, 4, 2, 2],
[3, 1, 5, 1, 9],
[6, 7, 4, 1, 4],
[9, 6, 3, 3, 9],
[6, 8, 9, 1, 9]])
In [153]:
Out[153]:
In [154]:
Out[154]:
Array Manipulation
In [87]:
# transpose
array1=np.random.randint(10,20,(2,3))
print(array1)
array1.shape
[[14 12 19]
[11 12 19]]
Out[87]:
(2, 3)
In [88]:
trans=np.transpose(array1)
print(trans)
trans.shape
[[14 11]
[12 12]
[19 19]]
Out[88]:
(3, 2)
In [90]:
# reshaping array
a=np.random.randint(10,30,(2,3))
print(a)
print(a.shape)
[[15 23 18]
[25 18 13]]
(2, 3)
In [91]:
b=a.reshape(3,2)
print(b)
print(b.shape)
[[15 23]
[18 25]
[18 13]]
(3, 2)
In [105]:
myarr=np.arange(0,11)
print(myarr)
[ 0 1 2 3 4 5 6 7 8 9 10]
In [106]:
myarr[3]
Out[106]:
In [107]:
Out[107]:
array([3, 4])
In [108]:
myarr[:5]
Out[108]:
array([0, 1, 2, 3, 4])
In [109]:
myarr[5:]
Out[109]:
array([ 5, 6, 7, 8, 9, 10])
Brodcasting
In [110]:
myarr
Out[110]:
array([ 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10])
In [111]:
myarr[0:5]=100
In [112]:
myarr
Out[112]:
In [113]:
arr=np.arange(0,11)
arr
Out[113]:
array([ 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10])
slicing
In [114]:
In [115]:
arr
Out[115]:
array([ 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10])
In [116]:
slice_of_array=arr[0:5]
slice_of_array
Out[116]:
array([0, 1, 2, 3, 4])
In [117]:
slice_of_array[:]=99
slice_of_array
Out[117]:
In [118]:
arr
Out[118]:
In [119]:
# so here it affect to its original array in order to not happen it we can do the copy of
In [120]:
arr_copy=arr.copy()
In [121]:
arr_copy[:]=100
In [122]:
arr_copy
Out[122]:
array([100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100])
In [123]:
arr
Out[123]:
slicing 2D array
In [159]:
print(arr[1, 1:4])
[7 8 9]
negative slicing
In [158]:
print(arr[-3:-1])
[5 6]
In [124]:
arr_2d=np.random.randint(10,99,(3,3))
arr_2d
Out[124]:
In [125]:
arr_2d.shape
Out[125]:
(3, 3)
In [126]:
Out[126]:
In [127]:
Out[127]:
17
In [128]:
Out[128]:
In [129]:
arr_2d[:2,1:]
Out[129]:
array([[93, 17],
[78, 60]])
In [156]:
Indexing in 3D array
In [157]:
import numpy as np
arr = np.array([[[1, 2, 3], [4, 5, 6]], [[7, 8, 9], [10, 11, 12]]])
print(arr[0, 1, 2])
In [130]:
arr=np.arange(0,11)
arr
Out[130]:
array([ 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10])
In [131]:
arr>4
Out[131]:
In [132]:
bool_arr=arr>4
In [133]:
Out[133]:
array([ 5, 6, 7, 8, 9, 10])
In [134]:
Out[134]:
array([ 5, 6, 7, 8, 9, 10])
In [163]:
print("="*100)
==========================================================================
==========================
In [ ]: