forked from tanishh/HH-PA2609
-
Notifications
You must be signed in to change notification settings - Fork 0
/
18NumpyOperations.py
329 lines (263 loc) · 6.67 KB
/
18NumpyOperations.py
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
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
#Numpy - Introduction
#Numpy - which stands for Numerical Python, is a library consisting of multidimensional array objects and a collection of routines for processing those arrays. Using NumPy, mathematical and logical operations on arrays can be performed
list1 = [1,2 , 42.5 , 'a', 'Dhiraj', True]
list1
list1[0].upper()
list1[4].upper()
#extra bit required in the list for storage.
import numpy
numpy.arange(10)
#library for numpy : default as part of anaconda
import numpy as np
#np is alias now can be used for various functions
#Seq : start at 0, end at 10-1
np.arange(10) #comment
np.arange(0,10)
np.arange(1,11)
#
x=np.array([1,4,3], dtype='int32')
x.dtype
#start at 10, end at 20-1
x=np.arange(10,20)
x
x.dtype
x[2]
x[-1]
x[-2]
#filter
x[0] #first value of an array
x[2], x[5], x[-1] #multiple values seperated by comma
#x[-1] #last element
x[0:5] #first 5 elements
x[::2]
x[start:end:step]
x[3::2]
x[0:6:2] #from first 6 elements, skip by 2
x[10:0:-2] #start from 10th position, reverse directions to 0th
x
x[1::3] #every 3rd element from 2nd element
#random values :
np.random.random()
np.random.random(size=10) #10 numbers between 0 and 1
np.random.randint(10, size=9) #6 random integer numbers bet 0 and 9 (incl)
x=np.random.randint(60,100, size=100)
x
min(x), max(x)
max(x) - min(x)
#range(x)
#duplicates
np.random.randint(10, size=(3,4)) #two Dim random int values betw 0 and 9 (incl) : 3 rows X 4 columns
# save this array in x2 and filter elements
x2=np.random.randint(10, size=(3,4))
x2
x2.shape
x2[0,0]
x2[1,1] #first row, first col
x2[:2,] #upto 1st row all col
x2[1:,]
x2[:1,:2] #intersection of 1st row, upto 2 columns
x2 #see it
x2[::2,::2] #alternate row, all columns
x2[::-1,::-1] #reverse rows an columns #understand
#3 dim
x3=np.random.randint(10, size=(3,4,5)) #matrix,rows, cols
x3
#check features
np.ndim(x3) # 3 Dim
np.shape(x3) # 3 matrix, 4 rows, 5 columns : MRC order
np.size(x3) # 3 * 4 * 5 = 60
#more numpy
np.random.randint(1, 10, size=10) #10 nos between 1 and 10, 1 dim
np.random.randint(10,20, size=(3,5)) # 3Rows * 5Columns = 15 nos between 10 and 20, 2 dim
#normal distribution
xn1=np.random.normal(loc=0,scale=1,size=(3,3))
#3Rows * 3Columns = 9 normal distributed nos mean=0, stddev=1, 2 Dim array
xn1
np.mean(xn1)
np.std(xn1)
#not close : sample is small ie 9
xn1=np.random.normal(0,1,100)
len(xn1), xn1.mean(), xn1.std()
xn2=np.random.normal(loc=0,scale=1,size=1000000)
len(xn2)
np.mean(xn2), xn2.mean() #two methods
xn2.std()
#divide points between 10 to 15 into 9 equal spaces
np.linspace(0,10,5)
np.linspace(10,15,9)
np.diff(np.linspace(10,15,9))
xn1
xn1.round(2)
np.floor([1.2, 1.6])
np.ceil([1.2, 1.6])
np.trunc([1.2, 1.6])
np.round([1.2, 1.6])
np.trunc([-1.2, -1.6])
np.floor([-1.2, -1.6])
np.round([1.23434, 1.654455],2)
#fill 10 positions with empty values 0
xe= np.empty(10) #almost 0; way of initialising; in memory data return
xe#empty, unlike zeros, does not set the array values to zero, and may therefore be marginally faster. On the other hand, it requires the user to manually set all the values in the array, and should be used with caution.
#identity array
np.eye(4)
#all zeros: values already there. need to give numbers or shape
np.zeros([10])
np.zeros(shape=(3,5))
#all ones
np.ones([12])
#all with particular value
np.full((3,4),[3.14])
np.full((3,4), np.pi)
np.full((1,2),['Dhiraj-5','arjun-6'])
#char add
fname = np.char.array(['Dhiraj', 'Kounal'])
fname
lname = np.char.array(['Upadhyaya', 'Gupta'])
lname
fname + lname
#
course = np.array(['MBA','BBA','PHD'], dtype=np.object)
course + course
#changing shape
ns1=np.array([1,2,3,4])
ns1.shape, ns1.size
np.array([1,2,3,4,5,6,7]).reshape(2,3)
x=np.array([1,2,3,4,5,6]).reshape(2,3)
x
#changing axis
ns1=np.array([1,2,3,4])
ns1a=ns1[:,np.newaxis]
ns1a
#ns2 = np.array([[1],[2],[3],[4],[5]])
#ns2
#ns2[:np.newaxis,]
#%%
#concatenate arrays
x4=np.array([1,2,3,4,5,6,7])
x4.size
#3 x 4
x4b=np.concatenate([x4,np.zeros(5)])
x4c=np.concatenate([x4,np.zeros(3 * 4 - x4.size)])
x4c
x4b.reshape(3,4)
x=np.array([1,2,3])
y=np.array([4,5,6])
x,y
np.concatenate([x,y])
#2dim
x=np.arange(6).reshape(2,3)
x
y=np.arange(10,16).reshape(2,3)
y
np.concatenate([x,y], axis=0)
np.concatenate([x,y], axis=1)
#vertical and horizontal stack
np.vstack([x,y]) #axis =0, rowbind
np.hstack([x,y]) #axis=1, colbind
#split : break the array at particular position
x=np.arange(10,20)
x
np.linspace(10,19,3)
np.linspace(1,10, 4)
np.linspace(1,100, 4)
x=np.arange(10,20)
x
np.split(x,2)
x1,x2,x3 = np.split(x,[3,5]) #3rd, 5th : 3 subarrays
x1,x2,x3
#split in multi dim array
y=x.reshape([3,3])
y
#upper and lower
upper, lower = np.vsplit(y,[2])
upper #first 2 rows
lower # last row
#left and right : hsplit line : 1st col
left, right = np.hsplit(y,[1])
left
right
#%%
#Ufuncs
x=np.arange(5)
x
x + 5
#using functions of np
np.add(x,5) #add 5 to values
np.multiply(x,10) #multiply values by 10
y=np.empty(5)
y #almost zero/ intialisation o f array
np.multiply(x,5, out=y )
y #multiply x by 5 and save it in y
#%%
#more np methods
import numpy as np
x=np.random.randint(10,100, size=(3,6))
x
x.shape #shape - 3 rows, 6 columns
np.shape(x)
np.size(x) #how many values
x.sum() #sum of the values
np.sum(x[1,:])
x.mean() #mean of values
x.sum(axis=0) #sum of the values : columns : 6 columns
x.sum(axis=1) # sum of row values : 3 rows
x
x.min()
x.min(axis=1) #min in each row
x.max(axis=0) #min in each col
x
np.median(x) #median values in full dataset
np.max(x) #max
max(x) #will not work, as it is multi
max([1,2,3]) #this will work
np.min(x) #min
#%% More Functions
x=np.random.randint(30,50, size=200000)
x=np.array([30,49,50,60, 49])
np.equal(x, 49) #all values equal to 48
np.sum(np.equal(x,49))
np.greater(x, 40) #values greater than 40
np.sum(np.greater(x,40)) #how many values > 40
sum(np.greater(x,40))
np.less(x, 50) #values < 50
np.greater_equal(x, 40) #values >= 40
x < 40 #another way T/ F
np.sum(x < 49) #how many values < 40
x
np.sum(x < 40, axis=0) #in each col, values < 40
x=np.random.randint(10, size=(3,4))
x
np.all(x > 4)
np.any(x > 4)
np.sum(x > 1)
np.sum(x > 3, axis=1)
np.sum(x > 3, axis=0)
np.sum( (x> 3) & (x < 7), axis=0)
np.sum( ~((x> 3) & (x < 7)), axis=0)
#sort
#%%
x = np.random.randint(100,size=50)
x
np.sort(x)
x1 = np.sort(x)
#np.sort(-x)
np.argsort(x) #position of sorted arrays
#row or column major
np.arange(1,13)
np.arange(1,13).reshape(3,4)
np.arange(1,13).reshape(3,4, order='C')
np.arange(1,13).reshape(3,4, order='F')
#transpose
x=np.arange(1,13).reshape(3,4)
x
x.T
#Histograms
import matplotlib
from matplotlib import pyplot as plt
import numpy as np
n_arr=np.random.normal(100,20, 1000)
n_arr
l1=list(range(50, 150))
plt.hist(n_arr, bins = l1 )
plt.title("histogram")
plt.show()