Search

12 June, 2018

Exploring Numpy

What can we really do with Numpy? Why should we use it at all ?

Start with : import numpy

1. We can create arrays .


method: numpy.array(object, dtype=None, copy=True, order='K', subok=False, ndmin=0)


>>> a = numpy.array(range(10))
>>> a
array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9])
>>> a.dtype
dtype('int32')

In the above array, there are 10 columns and 1 row.

Note : The concept of rows and columns applies when you have a 2D array. However, the array numpy.array([1,2,3,4]) is a 1D array and so has only one dimension, therefore shape rightly returns a single valued iterable.

Refer this link




2. We can create/convert array of a particular type (immediate conversion of your list to a desired type)



>>> s = numpy.array(range(10), dtype=str)
>>> s
array(['0', '1', '2', '3', '4', '5', '6', '7', '8', '9'],
      dtype='|S1')

---------------------------------------------------------------------------------------

>>> s = numpy.array(range(10), dtype=float)
>>> s
array([ 0.,  1.,  2.,  3.,  4.,  5.,  6.,  7.,  8.,  9.])

3. We can change the dimensions of the array anytime easily.



>>> s = numpy.array(range(10), dtype=float)
>>> s
array([ 0.,  1.,  2.,  3.,  4.,  5.,  6.,  7.,  8.,  9.])
>>> s.shape
(10L,)
>>> s.shape = (2,5)
>>> s
array([[ 0.,  1.,  2.,  3.,  4.],
       [ 5.,  6.,  7.,  8.,  9.]])
>>> s.shape = (5,2)
>>> s
array([[ 0.,  1.],
       [ 2.,  3.],
       [ 4.,  5.],
       [ 6.,  7.],
       [ 8.,  9.]])
>>> s.shape
(5L, 2L)

You can also use the reshape method. This does not change the array but just returns the changed output. Whereas, obj.shape will change the shape permanently.

4. We can transpose the array. 


Well. We can actually create a copy . Not save in-place. numpy.transpose or obj.transpose


>>> s
array([[ 0.,  1.,  2.,  3.,  4.],
       [ 5.,  6.,  7.,  8.,  9.]])
>>> s.transpose()
array([[ 0.,  5.],
       [ 1.,  6.],
       [ 2.,  7.],
       [ 3.,  8.],
       [ 4.,  9.]])
>>> s
array([[ 0.,  1.,  2.,  3.,  4.],
       [ 5.,  6.,  7.,  8.,  9.]])

5. We can flatten any array with  and get back a single dimension (one column) array. 



>>> s
array([[ 0.,  1.,  2.,  3.,  4.],
       [ 5.,  6.,  7.,  8.,  9.]])
>>> s.flatten()
array([ 0.,  1.,  2.,  3.,  4.,  5.,  6.,  7.,  8.,  9.])
>>> s
array([[ 0.,  1.,  2.,  3.,  4.],
       [ 5.,  6.,  7.,  8.,  9.]])

Note : This will again not save the array in-place.

6. We can concatenate two or more arrays using the method 'numpy.concatenate((arr1, arr2, .....))'.



>>> s = numpy.array(range(5))
>>> s1 = numpy.array(range(6,11))
>>> numpy.concatenate((s,s1))
array([ 0,  1,  2,  3,  4,  6,  7,  8,  9, 10])

Above are example of single dimension arrays. If we have arrays of multi-dimension, we can also mention the axis.

Note: By default, axis=0 . It means, all the elements of each array will be appended to create one single same dimension array.


>>> arr1
array([[1, 2, 3],
       [4, 5, 6]])
>>> arr2
array([[11, 12, 13],
       [14, 15, 16]])

>>> numpy.concatenate((arr1, arr1))
array([[1, 2, 3],
       [4, 5, 6],
       [1, 2, 3],
       [4, 5, 6]])

#This shows that axis=0 is the default
>>> numpy.concatenate((arr1, arr2), axis=0)
array([[ 1,  2,  3],
       [ 4,  5,  6],
       [11, 12, 13],
       [14, 15, 16]])

#This shows that axis=1 will add corresponding index items together
>>> numpy.concatenate((arr1, arr2), axis=1)
array([[ 1,  2,  3, 11, 12, 13], # [1 2 3] + [11 12 13]
       [ 4,  5,  6, 14, 15, 16]]) # [4 5 6] + [14 15 16]

#Note that mentioning other axis will raise
#an error since 0 and 1 are possible axis
#values for a two dimensional array.

>>> numpy.concatenate((arr1, arr2), axis=2)

Traceback (most recent call last):
  File "<pyshell#131>", line 1, in <module>
    numpy.concatenate((arr1, arr2), axis=2)
AxisError: axis 2 is out of bounds for array of dimension 2

Things to remember at this junction.


You can anytime get a normal (python) list from a numpy object by calling the associated method obj.tolist() . 


>>> narr = numpy.array(range(5))
>>> narr
array([0, 1, 2, 3, 4])
>>> narr.tolist()
[0, 1, 2, 3, 4]

In case you have floats in your array and you want to round all members, the associated method with the array object narr "obj.round(decimals=0, out=None)" can be used .


>>> narr
array([  1.5,   1. ,   4.5,   6. ,  20.5,  45.7,   1. ,   1.5])
>>> narr.round()
array([  2.,   1.,   4.,   6.,  20.,  46.,   1.,   2.])


7. We can create an array with only zeros or ones.



>>> numpy.zeros(4)
array([ 0.,  0.,  0.,  0.])

>>> numpy.zeros(9)
array([ 0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.])
# Above are examples of 1-D arrays zero filled

>>> numpy.zeros((2,3))
array([[ 0.,  0.,  0.],
       [ 0.,  0.,  0.]])
#Above is an example of 2-D array with 2 rows and 3 columns

#Below are the same examples for ones

>>> numpy.ones((2,3))
array([[ 1.,  1.,  1.],
       [ 1.,  1.,  1.]])
>>> numpy.ones((4))
array([ 1.,  1.,  1.,  1.])
>>> numpy.ones(4)
array([ 1.,  1.,  1.,  1.])

8. We can create identity matrices while choosing the eye of the matrix. 



>>> numpy.identity(1)
array([[ 1.]])
>>> numpy.identity(2)
array([[ 1.,  0.],
       [ 0.,  1.]])
>>> numpy.identity(3)
array([[ 1.,  0.,  0.],
       [ 0.,  1.,  0.],
       [ 0.,  0.,  1.]])
>>> numpy.identity(4)
array([[ 1.,  0.,  0.,  0.],
       [ 0.,  1.,  0.,  0.],
       [ 0.,  0.,  1.,  0.],
       [ 0.,  0.,  0.,  1.]])

>>> numpy.eye(4, k=1)
array([[ 0.,  1.,  0.,  0.],
       [ 0.,  0.,  1.,  0.],
       [ 0.,  0.,  0.,  1.],
       [ 0.,  0.,  0.,  0.]])

>>> numpy.eye(4, k=-1)
array([[ 0.,  0.,  0.,  0.],
       [ 1.,  0.,  0.,  0.],
       [ 0.,  1.,  0.,  0.],
       [ 0.,  0.,  1.,  0.]])

>>> numpy.eye(4, 3, k=-1)
array([[ 0.,  0.,  0.],
       [ 1.,  0.,  0.],
       [ 0.,  1.,  0.],
       [ 0.,  0.,  1.]])


9.  We can ask numpy and get help information for a function, class or module.



numpy.info(
    object=None,
    maxwidth=76,
    output=<open file '<stdout>', mode 'w'>, 
    toplevel='numpy'
          )



In place of object, you can put a function name, class, module or a ndarray.
How much information to print is given by the parameter maxwidth.
One of the cool feature is that you can also save the information in a file by putting a file pointer at output parameter. The default is 'stdout'.
The toplevel parameter is used to give the starting point of search.

No comments:

Post a Comment