In [1]:
import numpy as np
In [2]:
a = np.arange(5)
a
Out[2]:
In [3]:
print(a*2)
print(a+3)
print(a-2)
In [4]:
b = np.ones(5)
b
Out[4]:
In [5]:
print(a-b*2)
print(a+b)
In [6]:
# these operations are faster in numpy than pure python
a = np.arange(10000)
%timeit a+2
In [7]:
# in native python
a = range(10000)
%timeit [i+2 for i in a]
In [8]:
a = np.random.randint(1, 10, 5)
a
Out[8]:
In [9]:
b =np.random.randint(1, 10, 5)
b
Out[9]:
In [10]:
a * b # elementwise operations
Out[10]:
In [11]:
a = np.random.randint(1, 10, (2,3))
a
Out[11]:
In [12]:
b = np.random.randint(1, 10, (2,3))
b
Out[12]:
In [13]:
a * b # element wise multiplication
Out[13]:
In [14]:
# a.dot(b) this will throw an error as Matix multiplication is not possible here
In [15]:
a.dot(b.T) # b.T will transpose the 2,3 matrix to 3,2 matrix
Out[15]:
In [16]:
a = np.array([1, 3, 7, 6, 5])
b = np.array([1, 2, 7, 8, 5])
print(a,b)
In [17]:
# Comparison
a == b
Out[17]:
In [18]:
a > b
Out[18]:
In [19]:
a = np.array([1,2,3,4])
b = np.array([3,4, 9, 8])
c = np.array([1,2,3,4])
In [20]:
np.array_equal(a, b)
Out[20]:
In [21]:
np.array_equal(a, c)
Out[21]:
In [22]:
a = np.array([1,1,0,0], dtype='bool')
b = np.array([1,0,1,0], dtype='bool')
print(a, b)
In [23]:
np.logical_or(a,b)
Out[23]:
In [24]:
np.logical_and(a,b)
Out[24]:
In [25]:
a = np.array([1, 0.5, 0, 3])
a
Out[25]:
In [26]:
np.sin(a)
Out[26]:
In [27]:
np.log(a)
Out[27]:
In [28]:
np.exp(a)
Out[28]:
In [29]:
a = np.triu(np.ones((3, 3)), 1)
a
Out[29]:
In [30]:
a.T # transposition of array is just a view and stored in memory
Out[30]:
In [31]:
x = np.array([1,2,3,4])
x.sum()
Out[31]:
In [32]:
x = np.array([[1,2,3],[3,4,5]])
x
Out[32]:
In [33]:
x.sum(axis=0) # column sum
Out[33]:
In [34]:
x.sum(axis=1) # row sum
Out[34]:
In [35]:
x.min()
Out[35]:
In [36]:
x.min(axis=1)
Out[36]:
In [37]:
x.max(axis=0)
Out[37]:
In [38]:
x.argmin() # index of min element
Out[38]:
In [39]:
x.argmax() # index of max element
Out[39]:
In [40]:
np.all([True, False, True])
Out[40]:
In [41]:
np.any([True, False, True])
Out[41]:
In [42]:
a = np.zeros((10,10))
np.any(a)
Out[42]:
In [43]:
np.all(a)
Out[43]:
In [44]:
np.all(a==0)
Out[44]:
In [45]:
np.any(a!=0)
Out[45]:
In [46]:
x = np.array([1, 2, 3, 1])
y = np.array([[1, 2, 3], [5, 6, 1]])
print(x, "\n\n",y)
In [47]:
x.mean()
Out[47]:
In [48]:
np.median(x)
Out[48]:
In [49]:
np.median(y, axis=-1) # last axis
Out[49]:
In [50]:
x.std()
Out[50]:
In [51]:
a = np.ones((3,4))
a
Out[51]:
In [52]:
a[2:,2:]=0
a
Out[52]:
In [53]:
a = np.arange(0, 40, 10)
a.shape
Out[53]:
In [54]:
a = a[:, np.newaxis] # newaxis is a nice feature supported by numpy
a
Out[54]:
In [55]:
a.shape
Out[55]:
In [56]:
mileposts = np.array([0, 198, 303, 736, 871, 1175, 1475, 1544,1913, 2448])
In [57]:
distance = np.abs(mileposts - mileposts[:, np.newaxis])
distance
Out[57]:
In [58]:
x, y = np.arange(5), np.arange(5)[:, np.newaxis]
print(x, "\n\n", y)
In [59]:
distance = np.sqrt(x ** 2 + y ** 2)
distance
Out[59]:
the numpy.ogrid function allows to directly create vectors x and y of the previous example, with two "significant dimensions":
In [60]:
x, y = np.ogrid[0:5, 0:5]
print(x, "\n\n", y)
In [61]:
print(x.shape, y.shape)
In [62]:
distance = np.sqrt(x ** 2 + y ** 2)
distance
Out[62]:
np.mgrid directly providesmatrices full of indices for cases where we can’t (or don’t want to) benefit frombroadcasting
In [63]:
x, y = np.mgrid[0:4, 0:4]
print(x, "\n\n", y)
In [64]:
a = np.array([[1, 2, 3], [4, 5, 6]])
a
Out[64]:
In [65]:
a.ravel()
Out[65]:
In [66]:
a.T.ravel()
Out[66]:
In [67]:
a.shape
Out[67]:
In [68]:
a.ravel()
Out[68]:
In [69]:
a.ravel().reshape(3,2)
Out[69]:
In [70]:
a.reshape((2, -1)) # # unspecified (-1) value is inferred
Out[70]:
In [71]:
a.reshape((3, -1))
Out[71]:
In [72]:
a = np.arange(4)
a
Out[72]:
In [73]:
a[:, np.newaxis]
Out[73]:
In [74]:
a[np.newaxis,:]
Out[74]:
In [75]:
a = np.arange(4*3*2).reshape(4, 3, 2)
a
Out[75]:
In [76]:
a.shape
Out[76]:
In [77]:
a[0,1,0]
Out[77]:
In [78]:
a.ravel().reshape(2,3,4)
Out[78]:
In [83]:
o = np.arange(4)
o.resize((8,))
o
# It will throw an error
# ValueError: cannot resize an array that references or is referenced
# by another array in this way. Use the resize function
Out[83]:
In [84]:
a = np.array([[4, 3, 5], [1, 2, 1]])
a
Out[84]:
In [87]:
b = np.sort(a, axis=1) # Sorts each row separately!
b
Out[87]:
In [89]:
a.sort(axis=1) # inplace sort
a
Out[89]:
In [90]:
# Sorting with fancy indexing:
a = np.array([4, 3, 1, 2])
j = np.argsort(a)
j
Out[90]:
In [91]:
a[j]
Out[91]:
In [93]:
# Finding minima and maxima
j_max = np.argmax(a)
j_min = np.argmin(a)
print(j_max, j_min) # indexes
print(a[j_max], a[j_min])
In [ ]: