arrays.txt
author Santosh G. Vattam <vattam.santosh@gmail.com>
Fri, 16 Apr 2010 12:04:03 +0530
changeset 75 3a94917224e9
parent 72 7d4ed969a942
child 125 27ddf1255daa
permissions -rw-r--r--
Minor edits.
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
67
806cca3b7231 Minor edits.
Santosh G. Vattam <vattam.santosh@gmail.com>
parents: 61
diff changeset
     1
Hello friends and welcome to this tutorial on Matrices.
806cca3b7231 Minor edits.
Santosh G. Vattam <vattam.santosh@gmail.com>
parents: 61
diff changeset
     2
In python all matrix operations are done using arrays.
75
3a94917224e9 Minor edits.
Santosh G. Vattam <vattam.santosh@gmail.com>
parents: 72
diff changeset
     3
We have already seen in previous session that how arrays are better suited for certain mathematical operations. In this session we shall see how to perform efficient matrix operations using arrays. We shall see how to create them, how to initialize them, how to manipulate and use them to perform some basic image processing. For this tutorial we shall need the lena.png image. Hope you have the image with you. 
54
46a3575919f5 Work on session 4, Arrays started.
Shantanu <shantanu@fossee.in>
parents: 40
diff changeset
     4
72
7d4ed969a942 Minor edits.
Santosh G. Vattam <vattam.santosh@gmail.com>
parents: 70
diff changeset
     5
Let's now start off. As you can see our lena image is on the desktop, so first let's navigate to the desktop by cd Desktop.
7d4ed969a942 Minor edits.
Santosh G. Vattam <vattam.santosh@gmail.com>
parents: 70
diff changeset
     6
7d4ed969a942 Minor edits.
Santosh G. Vattam <vattam.santosh@gmail.com>
parents: 70
diff changeset
     7
Let's now fire up Ipython, ipython -pylab
7d4ed969a942 Minor edits.
Santosh G. Vattam <vattam.santosh@gmail.com>
parents: 70
diff changeset
     8
67
806cca3b7231 Minor edits.
Santosh G. Vattam <vattam.santosh@gmail.com>
parents: 61
diff changeset
     9
First things first, let's start by creating a normal array, type:
806cca3b7231 Minor edits.
Santosh G. Vattam <vattam.santosh@gmail.com>
parents: 61
diff changeset
    10
a equal to array([5, 8, 10, 13])
54
46a3575919f5 Work on session 4, Arrays started.
Shantanu <shantanu@fossee.in>
parents: 40
diff changeset
    11
67
806cca3b7231 Minor edits.
Santosh G. Vattam <vattam.santosh@gmail.com>
parents: 61
diff changeset
    12
let's check the value of a by typing
54
46a3575919f5 Work on session 4, Arrays started.
Shantanu <shantanu@fossee.in>
parents: 40
diff changeset
    13
a
46a3575919f5 Work on session 4, Arrays started.
Shantanu <shantanu@fossee.in>
parents: 40
diff changeset
    14
67
806cca3b7231 Minor edits.
Santosh G. Vattam <vattam.santosh@gmail.com>
parents: 61
diff changeset
    15
Here a is single dimension array, that is it has only one row. Let's now look at creating multi-dimensional arrays by
54
46a3575919f5 Work on session 4, Arrays started.
Shantanu <shantanu@fossee.in>
parents: 40
diff changeset
    16
46a3575919f5 Work on session 4, Arrays started.
Shantanu <shantanu@fossee.in>
parents: 40
diff changeset
    17
c = array([[11,12,13], [21,22,23], [31,32,33]])
46a3575919f5 Work on session 4, Arrays started.
Shantanu <shantanu@fossee.in>
parents: 40
diff changeset
    18
46a3575919f5 Work on session 4, Arrays started.
Shantanu <shantanu@fossee.in>
parents: 40
diff changeset
    19
both c and a are arrays but with different dimensions or shape
46a3575919f5 Work on session 4, Arrays started.
Shantanu <shantanu@fossee.in>
parents: 40
diff changeset
    20
we can check shape of arrays by using shape attribute of arrays.
46a3575919f5 Work on session 4, Arrays started.
Shantanu <shantanu@fossee.in>
parents: 40
diff changeset
    21
a.shape
46a3575919f5 Work on session 4, Arrays started.
Shantanu <shantanu@fossee.in>
parents: 40
diff changeset
    22
c.shape
46a3575919f5 Work on session 4, Arrays started.
Shantanu <shantanu@fossee.in>
parents: 40
diff changeset
    23
67
806cca3b7231 Minor edits.
Santosh G. Vattam <vattam.santosh@gmail.com>
parents: 61
diff changeset
    24
A few other handy array initialization methods are also available to make life easier.
806cca3b7231 Minor edits.
Santosh G. Vattam <vattam.santosh@gmail.com>
parents: 61
diff changeset
    25
say we want to create an array of size 3x4 with all the elements initialized to 1, we use
54
46a3575919f5 Work on session 4, Arrays started.
Shantanu <shantanu@fossee.in>
parents: 40
diff changeset
    26
b = ones((3, 4))
69
5452f6b11fe6 Minor edits.
Santosh G. Vattam <vattam.santosh@gmail.com>
parents: 67
diff changeset
    27
and b is
54
46a3575919f5 Work on session 4, Arrays started.
Shantanu <shantanu@fossee.in>
parents: 40
diff changeset
    28
b
69
5452f6b11fe6 Minor edits.
Santosh G. Vattam <vattam.santosh@gmail.com>
parents: 67
diff changeset
    29
similarly, suppose we already have an array, and we want to create another array with the same shape but with initial values equal to one, for eg, to get an array similar in shape to the array 'c' but with all elements as 1 we type:
54
46a3575919f5 Work on session 4, Arrays started.
Shantanu <shantanu@fossee.in>
parents: 40
diff changeset
    30
d = ones_like(c)
69
5452f6b11fe6 Minor edits.
Santosh G. Vattam <vattam.santosh@gmail.com>
parents: 67
diff changeset
    31
and d is a 3x3 array with all values equal to 1
54
46a3575919f5 Work on session 4, Arrays started.
Shantanu <shantanu@fossee.in>
parents: 40
diff changeset
    32
69
5452f6b11fe6 Minor edits.
Santosh G. Vattam <vattam.santosh@gmail.com>
parents: 67
diff changeset
    33
Similarly there are functions like zeros and zeros_like which initialize array with all values being 0. One more useful function available is 'identity', it create identity matrix of given order
54
46a3575919f5 Work on session 4, Arrays started.
Shantanu <shantanu@fossee.in>
parents: 40
diff changeset
    34
i = identity(3)
46a3575919f5 Work on session 4, Arrays started.
Shantanu <shantanu@fossee.in>
parents: 40
diff changeset
    35
i
46a3575919f5 Work on session 4, Arrays started.
Shantanu <shantanu@fossee.in>
parents: 40
diff changeset
    36
69
5452f6b11fe6 Minor edits.
Santosh G. Vattam <vattam.santosh@gmail.com>
parents: 67
diff changeset
    37
Note that identity takes just one argument since identity matrix is always a square matrix.
5452f6b11fe6 Minor edits.
Santosh G. Vattam <vattam.santosh@gmail.com>
parents: 67
diff changeset
    38
55
1fe734b20950 Added slicing and striding part.
Shantanu <shantanu@fossee.in>
parents: 54
diff changeset
    39
----------------
69
5452f6b11fe6 Minor edits.
Santosh G. Vattam <vattam.santosh@gmail.com>
parents: 67
diff changeset
    40
Now that we have covered creation of arrays, we shall see how to access and change values of particular elements. 
5452f6b11fe6 Minor edits.
Santosh G. Vattam <vattam.santosh@gmail.com>
parents: 67
diff changeset
    41
Remember we created a 3x3 matrix earlier, 
55
1fe734b20950 Added slicing and striding part.
Shantanu <shantanu@fossee.in>
parents: 54
diff changeset
    42
c
1fe734b20950 Added slicing and striding part.
Shantanu <shantanu@fossee.in>
parents: 54
diff changeset
    43
1fe734b20950 Added slicing and striding part.
Shantanu <shantanu@fossee.in>
parents: 54
diff changeset
    44
to access the element 23 we type
1fe734b20950 Added slicing and striding part.
Shantanu <shantanu@fossee.in>
parents: 54
diff changeset
    45
c[1][2]
1fe734b20950 Added slicing and striding part.
Shantanu <shantanu@fossee.in>
parents: 54
diff changeset
    46
69
5452f6b11fe6 Minor edits.
Santosh G. Vattam <vattam.santosh@gmail.com>
parents: 67
diff changeset
    47
It is at the second row of the third column of the matrix/array c. Note that index values of arrays also start from 0.
5452f6b11fe6 Minor edits.
Santosh G. Vattam <vattam.santosh@gmail.com>
parents: 67
diff changeset
    48
Alternatively, the more popular way of doing the same is
55
1fe734b20950 Added slicing and striding part.
Shantanu <shantanu@fossee.in>
parents: 54
diff changeset
    49
c[1, 2]
1fe734b20950 Added slicing and striding part.
Shantanu <shantanu@fossee.in>
parents: 54
diff changeset
    50
1fe734b20950 Added slicing and striding part.
Shantanu <shantanu@fossee.in>
parents: 54
diff changeset
    51
here ',' is used as separator for row and column value. Similarly any value from the array can be accessed.
1fe734b20950 Added slicing and striding part.
Shantanu <shantanu@fossee.in>
parents: 54
diff changeset
    52
1fe734b20950 Added slicing and striding part.
Shantanu <shantanu@fossee.in>
parents: 54
diff changeset
    53
to access particular row completely we simply skip the column value
1fe734b20950 Added slicing and striding part.
Shantanu <shantanu@fossee.in>
parents: 54
diff changeset
    54
c[1]
69
5452f6b11fe6 Minor edits.
Santosh G. Vattam <vattam.santosh@gmail.com>
parents: 67
diff changeset
    55
gives us the entire second row. 
55
1fe734b20950 Added slicing and striding part.
Shantanu <shantanu@fossee.in>
parents: 54
diff changeset
    56
69
5452f6b11fe6 Minor edits.
Santosh G. Vattam <vattam.santosh@gmail.com>
parents: 67
diff changeset
    57
We can assign a new value to an element, the same way we accessed it. For eg., 
55
1fe734b20950 Added slicing and striding part.
Shantanu <shantanu@fossee.in>
parents: 54
diff changeset
    58
c[1, 1] = -22
1fe734b20950 Added slicing and striding part.
Shantanu <shantanu@fossee.in>
parents: 54
diff changeset
    59
c
1fe734b20950 Added slicing and striding part.
Shantanu <shantanu@fossee.in>
parents: 54
diff changeset
    60
69
5452f6b11fe6 Minor edits.
Santosh G. Vattam <vattam.santosh@gmail.com>
parents: 67
diff changeset
    61
In order to change an entire row we type:
55
1fe734b20950 Added slicing and striding part.
Shantanu <shantanu@fossee.in>
parents: 54
diff changeset
    62
c[1] = 0
1fe734b20950 Added slicing and striding part.
Shantanu <shantanu@fossee.in>
parents: 54
diff changeset
    63
c
69
5452f6b11fe6 Minor edits.
Santosh G. Vattam <vattam.santosh@gmail.com>
parents: 67
diff changeset
    64
as we can see, all elements of the second row are now 0
55
1fe734b20950 Added slicing and striding part.
Shantanu <shantanu@fossee.in>
parents: 54
diff changeset
    65
1fe734b20950 Added slicing and striding part.
Shantanu <shantanu@fossee.in>
parents: 54
diff changeset
    66
Accessing a row is straight forward we skip column part
69
5452f6b11fe6 Minor edits.
Santosh G. Vattam <vattam.santosh@gmail.com>
parents: 67
diff changeset
    67
but the same cannot be done to access columns. In order to access the whole column we have to use ':'
55
1fe734b20950 Added slicing and striding part.
Shantanu <shantanu@fossee.in>
parents: 54
diff changeset
    68
c[:,2]
69
5452f6b11fe6 Minor edits.
Santosh G. Vattam <vattam.santosh@gmail.com>
parents: 67
diff changeset
    69
returns the third column.
55
1fe734b20950 Added slicing and striding part.
Shantanu <shantanu@fossee.in>
parents: 54
diff changeset
    70
here the ':' part mentioned for row value symbolises entire row.
1fe734b20950 Added slicing and striding part.
Shantanu <shantanu@fossee.in>
parents: 54
diff changeset
    71
the c[1] we were using earlier can also be written as c[1,:]
1fe734b20950 Added slicing and striding part.
Shantanu <shantanu@fossee.in>
parents: 54
diff changeset
    72
1fe734b20950 Added slicing and striding part.
Shantanu <shantanu@fossee.in>
parents: 54
diff changeset
    73
':' actually takes two value. for any row or column we can mention
75
3a94917224e9 Minor edits.
Santosh G. Vattam <vattam.santosh@gmail.com>
parents: 72
diff changeset
    74
start:end values, and rows or columns starting for 'start' till 'end' will be returned. Lets try some examples for better understanding
55
1fe734b20950 Added slicing and striding part.
Shantanu <shantanu@fossee.in>
parents: 54
diff changeset
    75
c[0:2,:]
69
5452f6b11fe6 Minor edits.
Santosh G. Vattam <vattam.santosh@gmail.com>
parents: 67
diff changeset
    76
results in rows starting from row zero(0) upto the second row and all columns. Note here that 'end', in this case, '2' will not be included in resulting array.
55
1fe734b20950 Added slicing and striding part.
Shantanu <shantanu@fossee.in>
parents: 54
diff changeset
    77
1fe734b20950 Added slicing and striding part.
Shantanu <shantanu@fossee.in>
parents: 54
diff changeset
    78
c[1:3,:] 
1fe734b20950 Added slicing and striding part.
Shantanu <shantanu@fossee.in>
parents: 54
diff changeset
    79
gives second and third row.
1fe734b20950 Added slicing and striding part.
Shantanu <shantanu@fossee.in>
parents: 54
diff changeset
    80
1fe734b20950 Added slicing and striding part.
Shantanu <shantanu@fossee.in>
parents: 54
diff changeset
    81
similarly we can try this on columns also:
1fe734b20950 Added slicing and striding part.
Shantanu <shantanu@fossee.in>
parents: 54
diff changeset
    82
c[:, 0:2] gives us first two column
1fe734b20950 Added slicing and striding part.
Shantanu <shantanu@fossee.in>
parents: 54
diff changeset
    83
This whole concept of accessing chunks of arrays is known as 'slicing'
1fe734b20950 Added slicing and striding part.
Shantanu <shantanu@fossee.in>
parents: 54
diff changeset
    84
1fe734b20950 Added slicing and striding part.
Shantanu <shantanu@fossee.in>
parents: 54
diff changeset
    85
There is one more interesting and handy feature of slicing. We saw earlier that how only ':' means entire row or column.
1fe734b20950 Added slicing and striding part.
Shantanu <shantanu@fossee.in>
parents: 54
diff changeset
    86
It actually means if we don't specify start and end part of slice default is from zero to end.
1fe734b20950 Added slicing and striding part.
Shantanu <shantanu@fossee.in>
parents: 54
diff changeset
    87
1fe734b20950 Added slicing and striding part.
Shantanu <shantanu@fossee.in>
parents: 54
diff changeset
    88
so
1fe734b20950 Added slicing and striding part.
Shantanu <shantanu@fossee.in>
parents: 54
diff changeset
    89
c[:, :2]
69
5452f6b11fe6 Minor edits.
Santosh G. Vattam <vattam.santosh@gmail.com>
parents: 67
diff changeset
    90
also gives us first two columns
5452f6b11fe6 Minor edits.
Santosh G. Vattam <vattam.santosh@gmail.com>
parents: 67
diff changeset
    91
and c[:, 1:] returns all columns excluding the 0th column.
55
1fe734b20950 Added slicing and striding part.
Shantanu <shantanu@fossee.in>
parents: 54
diff changeset
    92
1fe734b20950 Added slicing and striding part.
Shantanu <shantanu@fossee.in>
parents: 54
diff changeset
    93
c[1:, :2]
69
5452f6b11fe6 Minor edits.
Santosh G. Vattam <vattam.santosh@gmail.com>
parents: 67
diff changeset
    94
returns first two columns of all rows excepting the 0th row.
55
1fe734b20950 Added slicing and striding part.
Shantanu <shantanu@fossee.in>
parents: 54
diff changeset
    95
69
5452f6b11fe6 Minor edits.
Santosh G. Vattam <vattam.santosh@gmail.com>
parents: 67
diff changeset
    96
Now we shall look into one more powerful feature of arrays: 'striding'.
5452f6b11fe6 Minor edits.
Santosh G. Vattam <vattam.santosh@gmail.com>
parents: 67
diff changeset
    97
Striding allows us to jump or skip, rows or columns by a certain interval. We can specify the step size.
5452f6b11fe6 Minor edits.
Santosh G. Vattam <vattam.santosh@gmail.com>
parents: 67
diff changeset
    98
c[:,:] gives us entire array
55
1fe734b20950 Added slicing and striding part.
Shantanu <shantanu@fossee.in>
parents: 54
diff changeset
    99
we add one more ':' to row or column part to specify a step size.
1fe734b20950 Added slicing and striding part.
Shantanu <shantanu@fossee.in>
parents: 54
diff changeset
   100
c[:, ::2]
69
5452f6b11fe6 Minor edits.
Santosh G. Vattam <vattam.santosh@gmail.com>
parents: 67
diff changeset
   101
gives us first and third column. Since step size is two, it starts with the first column(blank before : means 0) and then we jump one column and then third(blank after : means end)
55
1fe734b20950 Added slicing and striding part.
Shantanu <shantanu@fossee.in>
parents: 54
diff changeset
   102
similarly 
69
5452f6b11fe6 Minor edits.
Santosh G. Vattam <vattam.santosh@gmail.com>
parents: 67
diff changeset
   103
c[::2,:] returns a 2x3 array with the first and the third row
55
1fe734b20950 Added slicing and striding part.
Shantanu <shantanu@fossee.in>
parents: 54
diff changeset
   104
69
5452f6b11fe6 Minor edits.
Santosh G. Vattam <vattam.santosh@gmail.com>
parents: 67
diff changeset
   105
and c[::2, ::2] gives us a 2x2 array with the first and the third row and column 
55
1fe734b20950 Added slicing and striding part.
Shantanu <shantanu@fossee.in>
parents: 54
diff changeset
   106
56
86c862b3dbef First cut for arrays and matrices.
Shantanu <shantanu@fossee.in>
parents: 55
diff changeset
   107
Lets us try to use these concepts of slicing and striding for doing some basic image manipulation
86c862b3dbef First cut for arrays and matrices.
Shantanu <shantanu@fossee.in>
parents: 55
diff changeset
   108
69
5452f6b11fe6 Minor edits.
Santosh G. Vattam <vattam.santosh@gmail.com>
parents: 67
diff changeset
   109
pylab has a function named imread to read images. We shall use the '(in)famous' lena image for our experimentation. Its there on desktop. 
56
86c862b3dbef First cut for arrays and matrices.
Shantanu <shantanu@fossee.in>
parents: 55
diff changeset
   110
86c862b3dbef First cut for arrays and matrices.
Shantanu <shantanu@fossee.in>
parents: 55
diff changeset
   111
a = imread('lena.png')
86c862b3dbef First cut for arrays and matrices.
Shantanu <shantanu@fossee.in>
parents: 55
diff changeset
   112
a is a numpy array with the 'RGB' values of each pixel
86c862b3dbef First cut for arrays and matrices.
Shantanu <shantanu@fossee.in>
parents: 55
diff changeset
   113
a.shape
86c862b3dbef First cut for arrays and matrices.
Shantanu <shantanu@fossee.in>
parents: 55
diff changeset
   114
86c862b3dbef First cut for arrays and matrices.
Shantanu <shantanu@fossee.in>
parents: 55
diff changeset
   115
its a 512x512x3 array.
86c862b3dbef First cut for arrays and matrices.
Shantanu <shantanu@fossee.in>
parents: 55
diff changeset
   116
86c862b3dbef First cut for arrays and matrices.
Shantanu <shantanu@fossee.in>
parents: 55
diff changeset
   117
to view the image write
86c862b3dbef First cut for arrays and matrices.
Shantanu <shantanu@fossee.in>
parents: 55
diff changeset
   118
imshow(a)
86c862b3dbef First cut for arrays and matrices.
Shantanu <shantanu@fossee.in>
parents: 55
diff changeset
   119
69
5452f6b11fe6 Minor edits.
Santosh G. Vattam <vattam.santosh@gmail.com>
parents: 67
diff changeset
   120
lets try to crop the image to top left quarter. Since a is a normal array we can use slicing to get the top left quarter by
56
86c862b3dbef First cut for arrays and matrices.
Shantanu <shantanu@fossee.in>
parents: 55
diff changeset
   121
imshow(a[:255,:255]) (half of 512 is 256)
86c862b3dbef First cut for arrays and matrices.
Shantanu <shantanu@fossee.in>
parents: 55
diff changeset
   122
69
5452f6b11fe6 Minor edits.
Santosh G. Vattam <vattam.santosh@gmail.com>
parents: 67
diff changeset
   123
Lena's hat is not of much interest for us. Let's crop the image so that only her face is visible. And to do that we'll need some rough estimates of pixels. 
56
86c862b3dbef First cut for arrays and matrices.
Shantanu <shantanu@fossee.in>
parents: 55
diff changeset
   124
imshow(a)
69
5452f6b11fe6 Minor edits.
Santosh G. Vattam <vattam.santosh@gmail.com>
parents: 67
diff changeset
   125
now move your mouse pointer over the image, it gives us x, y coordinates of the mouse pointer's current location. We can get rough estimate of lena's face. We can observe that Lena's face begins from somewhere around 200, 200 and ends at 400, 400. Now cropping to these boundaries is simple
56
86c862b3dbef First cut for arrays and matrices.
Shantanu <shantanu@fossee.in>
parents: 55
diff changeset
   126
imshow(a[200:400, 200:400])
86c862b3dbef First cut for arrays and matrices.
Shantanu <shantanu@fossee.in>
parents: 55
diff changeset
   127
69
5452f6b11fe6 Minor edits.
Santosh G. Vattam <vattam.santosh@gmail.com>
parents: 67
diff changeset
   128
Next we shall try striding on this image. We shall resize the image by skipping alternate pixels. We have already seen how to skip alternate elements so,
56
86c862b3dbef First cut for arrays and matrices.
Shantanu <shantanu@fossee.in>
parents: 55
diff changeset
   129
imshow(a[::2, ::2])
86c862b3dbef First cut for arrays and matrices.
Shantanu <shantanu@fossee.in>
parents: 55
diff changeset
   130
note now the size of image is just 256x256 and still quality of image is not much compromised.
86c862b3dbef First cut for arrays and matrices.
Shantanu <shantanu@fossee.in>
parents: 55
diff changeset
   131
-------------------------
86c862b3dbef First cut for arrays and matrices.
Shantanu <shantanu@fossee.in>
parents: 55
diff changeset
   132
86c862b3dbef First cut for arrays and matrices.
Shantanu <shantanu@fossee.in>
parents: 55
diff changeset
   133
Till now we have covered initializing and accessing elements of arrays. Now we shall concentrate on functions available for arrays. We start this by creating 4x4 array by
86c862b3dbef First cut for arrays and matrices.
Shantanu <shantanu@fossee.in>
parents: 55
diff changeset
   134
86c862b3dbef First cut for arrays and matrices.
Shantanu <shantanu@fossee.in>
parents: 55
diff changeset
   135
a = array([[ 1, 1, 2, -1],[ 2, 5, -1, -9], [ 2, 1, -1, 3], [ 1, -3, 2, 7]])
86c862b3dbef First cut for arrays and matrices.
Shantanu <shantanu@fossee.in>
parents: 55
diff changeset
   136
a
86c862b3dbef First cut for arrays and matrices.
Shantanu <shantanu@fossee.in>
parents: 55
diff changeset
   137
86c862b3dbef First cut for arrays and matrices.
Shantanu <shantanu@fossee.in>
parents: 55
diff changeset
   138
To get transpose of this matrix write
86c862b3dbef First cut for arrays and matrices.
Shantanu <shantanu@fossee.in>
parents: 55
diff changeset
   139
a.T
69
5452f6b11fe6 Minor edits.
Santosh G. Vattam <vattam.santosh@gmail.com>
parents: 67
diff changeset
   140
5452f6b11fe6 Minor edits.
Santosh G. Vattam <vattam.santosh@gmail.com>
parents: 67
diff changeset
   141
The sum() function returns sum of all the elements of a matrix.
56
86c862b3dbef First cut for arrays and matrices.
Shantanu <shantanu@fossee.in>
parents: 55
diff changeset
   142
sum(a)
86c862b3dbef First cut for arrays and matrices.
Shantanu <shantanu@fossee.in>
parents: 55
diff changeset
   143
69
5452f6b11fe6 Minor edits.
Santosh G. Vattam <vattam.santosh@gmail.com>
parents: 67
diff changeset
   144
let's create one more array for checking more operations
56
86c862b3dbef First cut for arrays and matrices.
Shantanu <shantanu@fossee.in>
parents: 55
diff changeset
   145
b = array([[3,2,-1,5], [2,-2,4,9], [-1,0.5,-1,-7], [9,-5,7,3]])
86c862b3dbef First cut for arrays and matrices.
Shantanu <shantanu@fossee.in>
parents: 55
diff changeset
   146
69
5452f6b11fe6 Minor edits.
Santosh G. Vattam <vattam.santosh@gmail.com>
parents: 67
diff changeset
   147
+ takes care of matrix additions
56
86c862b3dbef First cut for arrays and matrices.
Shantanu <shantanu@fossee.in>
parents: 55
diff changeset
   148
a + b
86c862b3dbef First cut for arrays and matrices.
Shantanu <shantanu@fossee.in>
parents: 55
diff changeset
   149
86c862b3dbef First cut for arrays and matrices.
Shantanu <shantanu@fossee.in>
parents: 55
diff changeset
   150
lets try multiplication now, 
69
5452f6b11fe6 Minor edits.
Santosh G. Vattam <vattam.santosh@gmail.com>
parents: 67
diff changeset
   151
a * b returns the element wise product of two matrices.
56
86c862b3dbef First cut for arrays and matrices.
Shantanu <shantanu@fossee.in>
parents: 55
diff changeset
   152
86c862b3dbef First cut for arrays and matrices.
Shantanu <shantanu@fossee.in>
parents: 55
diff changeset
   153
To get matrix product of a and b we use
86c862b3dbef First cut for arrays and matrices.
Shantanu <shantanu@fossee.in>
parents: 55
diff changeset
   154
dot(a, b)
86c862b3dbef First cut for arrays and matrices.
Shantanu <shantanu@fossee.in>
parents: 55
diff changeset
   155
69
5452f6b11fe6 Minor edits.
Santosh G. Vattam <vattam.santosh@gmail.com>
parents: 67
diff changeset
   156
To get the inverse of a matrix we use,
56
86c862b3dbef First cut for arrays and matrices.
Shantanu <shantanu@fossee.in>
parents: 55
diff changeset
   157
86c862b3dbef First cut for arrays and matrices.
Shantanu <shantanu@fossee.in>
parents: 55
diff changeset
   158
inv(a)
86c862b3dbef First cut for arrays and matrices.
Shantanu <shantanu@fossee.in>
parents: 55
diff changeset
   159
86c862b3dbef First cut for arrays and matrices.
Shantanu <shantanu@fossee.in>
parents: 55
diff changeset
   160
det(a) returns determinant of matrix a
86c862b3dbef First cut for arrays and matrices.
Shantanu <shantanu@fossee.in>
parents: 55
diff changeset
   161
69
5452f6b11fe6 Minor edits.
Santosh G. Vattam <vattam.santosh@gmail.com>
parents: 67
diff changeset
   162
we shall create an array e
56
86c862b3dbef First cut for arrays and matrices.
Shantanu <shantanu@fossee.in>
parents: 55
diff changeset
   163
e = array([[3,2,4],[2,0,2],[4,2,3]])
86c862b3dbef First cut for arrays and matrices.
Shantanu <shantanu@fossee.in>
parents: 55
diff changeset
   164
and then to evaluate eigenvalues of array
69
5452f6b11fe6 Minor edits.
Santosh G. Vattam <vattam.santosh@gmail.com>
parents: 67
diff changeset
   165
eig(e)
56
86c862b3dbef First cut for arrays and matrices.
Shantanu <shantanu@fossee.in>
parents: 55
diff changeset
   166
it returns both eigen values and eigen vector of given matrix
86c862b3dbef First cut for arrays and matrices.
Shantanu <shantanu@fossee.in>
parents: 55
diff changeset
   167
to get only eigen values use
69
5452f6b11fe6 Minor edits.
Santosh G. Vattam <vattam.santosh@gmail.com>
parents: 67
diff changeset
   168
eigvals(e)
56
86c862b3dbef First cut for arrays and matrices.
Shantanu <shantanu@fossee.in>
parents: 55
diff changeset
   169
86c862b3dbef First cut for arrays and matrices.
Shantanu <shantanu@fossee.in>
parents: 55
diff changeset
   170
This brings us to end of this session. We have covered Matrices
86c862b3dbef First cut for arrays and matrices.
Shantanu <shantanu@fossee.in>
parents: 55
diff changeset
   171
Initialization
86c862b3dbef First cut for arrays and matrices.
Shantanu <shantanu@fossee.in>
parents: 55
diff changeset
   172
Slicing
86c862b3dbef First cut for arrays and matrices.
Shantanu <shantanu@fossee.in>
parents: 55
diff changeset
   173
Striding
86c862b3dbef First cut for arrays and matrices.
Shantanu <shantanu@fossee.in>
parents: 55
diff changeset
   174
A bit of image processing
86c862b3dbef First cut for arrays and matrices.
Shantanu <shantanu@fossee.in>
parents: 55
diff changeset
   175
Functions available for arrays
61
38ef280b1408 Minor changes to arrays.txt.
Shantanu <shantanu@fossee.in>
parents: 56
diff changeset
   176
56
86c862b3dbef First cut for arrays and matrices.
Shantanu <shantanu@fossee.in>
parents: 55
diff changeset
   177
Thank you
55
1fe734b20950 Added slicing and striding part.
Shantanu <shantanu@fossee.in>
parents: 54
diff changeset
   178
1fe734b20950 Added slicing and striding part.
Shantanu <shantanu@fossee.in>
parents: 54
diff changeset
   179
----------------
54
46a3575919f5 Work on session 4, Arrays started.
Shantanu <shantanu@fossee.in>
parents: 40
diff changeset
   180
We have seen 
46a3575919f5 Work on session 4, Arrays started.
Shantanu <shantanu@fossee.in>
parents: 40
diff changeset
   181
    Welcome to the Tutorial on arrays. 
46a3575919f5 Work on session 4, Arrays started.
Shantanu <shantanu@fossee.in>
parents: 40
diff changeset
   182
46a3575919f5 Work on session 4, Arrays started.
Shantanu <shantanu@fossee.in>
parents: 40
diff changeset
   183
    As mentioned in [the previous tutorial] arrays are much faster and
46a3575919f5 Work on session 4, Arrays started.
Shantanu <shantanu@fossee.in>
parents: 40
diff changeset
   184
    more efficient. In this tutorial we shall look at creating arrays,
46a3575919f5 Work on session 4, Arrays started.
Shantanu <shantanu@fossee.in>
parents: 40
diff changeset
   185
    accessing elements and changing them. 
46a3575919f5 Work on session 4, Arrays started.
Shantanu <shantanu@fossee.in>
parents: 40
diff changeset
   186
46a3575919f5 Work on session 4, Arrays started.
Shantanu <shantanu@fossee.in>
parents: 40
diff changeset
   187
    ---
46a3575919f5 Work on session 4, Arrays started.
Shantanu <shantanu@fossee.in>
parents: 40
diff changeset
   188
46a3575919f5 Work on session 4, Arrays started.
Shantanu <shantanu@fossee.in>
parents: 40
diff changeset
   189
    Let's start with creating simple arrays. We've already seen how to
46a3575919f5 Work on session 4, Arrays started.
Shantanu <shantanu@fossee.in>
parents: 40
diff changeset
   190
    convert lists to arrays. Inputting a new array is similar to that. 
46a3575919f5 Work on session 4, Arrays started.
Shantanu <shantanu@fossee.in>
parents: 40
diff changeset
   191
46a3575919f5 Work on session 4, Arrays started.
Shantanu <shantanu@fossee.in>
parents: 40
diff changeset
   192
    In []: 
46a3575919f5 Work on session 4, Arrays started.
Shantanu <shantanu@fossee.in>
parents: 40
diff changeset
   193
46a3575919f5 Work on session 4, Arrays started.
Shantanu <shantanu@fossee.in>
parents: 40
diff changeset
   194
    Type /a/, to see what it is. 
46a3575919f5 Work on session 4, Arrays started.
Shantanu <shantanu@fossee.in>
parents: 40
diff changeset
   195
46a3575919f5 Work on session 4, Arrays started.
Shantanu <shantanu@fossee.in>
parents: 40
diff changeset
   196
    In []: a
46a3575919f5 Work on session 4, Arrays started.
Shantanu <shantanu@fossee.in>
parents: 40
diff changeset
   197
    
46a3575919f5 Work on session 4, Arrays started.
Shantanu <shantanu@fossee.in>
parents: 40
diff changeset
   198
    We enter a multi-dimensional array this way -
46a3575919f5 Work on session 4, Arrays started.
Shantanu <shantanu@fossee.in>
parents: 40
diff changeset
   199
    
46a3575919f5 Work on session 4, Arrays started.
Shantanu <shantanu@fossee.in>
parents: 40
diff changeset
   200
    In []: c = array([[11,12,13],
46a3575919f5 Work on session 4, Arrays started.
Shantanu <shantanu@fossee.in>
parents: 40
diff changeset
   201
                     [21,22,23],
46a3575919f5 Work on session 4, Arrays started.
Shantanu <shantanu@fossee.in>
parents: 40
diff changeset
   202
                      [31,32,33]])
46a3575919f5 Work on session 4, Arrays started.
Shantanu <shantanu@fossee.in>
parents: 40
diff changeset
   203
46a3575919f5 Work on session 4, Arrays started.
Shantanu <shantanu@fossee.in>
parents: 40
diff changeset
   204
    To see what c is, we just type c in the prompt. 
46a3575919f5 Work on session 4, Arrays started.
Shantanu <shantanu@fossee.in>
parents: 40
diff changeset
   205
		      
46a3575919f5 Work on session 4, Arrays started.
Shantanu <shantanu@fossee.in>
parents: 40
diff changeset
   206
    In []: c
46a3575919f5 Work on session 4, Arrays started.
Shantanu <shantanu@fossee.in>
parents: 40
diff changeset
   207
46a3575919f5 Work on session 4, Arrays started.
Shantanu <shantanu@fossee.in>
parents: 40
diff changeset
   208
    To see the dimensions of the array c, we use c.shape
46a3575919f5 Work on session 4, Arrays started.
Shantanu <shantanu@fossee.in>
parents: 40
diff changeset
   209
    In []: c.shape 
46a3575919f5 Work on session 4, Arrays started.
Shantanu <shantanu@fossee.in>
parents: 40
diff changeset
   210
46a3575919f5 Work on session 4, Arrays started.
Shantanu <shantanu@fossee.in>
parents: 40
diff changeset
   211
    Now let us look at some special methods of creating an
46a3575919f5 Work on session 4, Arrays started.
Shantanu <shantanu@fossee.in>
parents: 40
diff changeset
   212
    array. There are various functions that allow us to create special
46a3575919f5 Work on session 4, Arrays started.
Shantanu <shantanu@fossee.in>
parents: 40
diff changeset
   213
    arrays. 
46a3575919f5 Work on session 4, Arrays started.
Shantanu <shantanu@fossee.in>
parents: 40
diff changeset
   214
46a3575919f5 Work on session 4, Arrays started.
Shantanu <shantanu@fossee.in>
parents: 40
diff changeset
   215
    The first one we shall look at is, /arange/. /arange/ is similar to
46a3575919f5 Work on session 4, Arrays started.
Shantanu <shantanu@fossee.in>
parents: 40
diff changeset
   216
    the range command, except that it returns an array and accepts
46a3575919f5 Work on session 4, Arrays started.
Shantanu <shantanu@fossee.in>
parents: 40
diff changeset
   217
    float arguments. 
46a3575919f5 Work on session 4, Arrays started.
Shantanu <shantanu@fossee.in>
parents: 40
diff changeset
   218
    
46a3575919f5 Work on session 4, Arrays started.
Shantanu <shantanu@fossee.in>
parents: 40
diff changeset
   219
    In []: a = arange(10)
46a3575919f5 Work on session 4, Arrays started.
Shantanu <shantanu@fossee.in>
parents: 40
diff changeset
   220
    
46a3575919f5 Work on session 4, Arrays started.
Shantanu <shantanu@fossee.in>
parents: 40
diff changeset
   221
    In []: a
46a3575919f5 Work on session 4, Arrays started.
Shantanu <shantanu@fossee.in>
parents: 40
diff changeset
   222
    This is the array we just created. 
46a3575919f5 Work on session 4, Arrays started.
Shantanu <shantanu@fossee.in>
parents: 40
diff changeset
   223
    
46a3575919f5 Work on session 4, Arrays started.
Shantanu <shantanu@fossee.in>
parents: 40
diff changeset
   224
    In []: a.shape
46a3575919f5 Work on session 4, Arrays started.
Shantanu <shantanu@fossee.in>
parents: 40
diff changeset
   225
    Note that /a/ is one dimensional and has 10 elements, as expected. 
46a3575919f5 Work on session 4, Arrays started.
Shantanu <shantanu@fossee.in>
parents: 40
diff changeset
   226
46a3575919f5 Work on session 4, Arrays started.
Shantanu <shantanu@fossee.in>
parents: 40
diff changeset
   227
    We could also use a.shape to change the shape of the array a. 
46a3575919f5 Work on session 4, Arrays started.
Shantanu <shantanu@fossee.in>
parents: 40
diff changeset
   228
    In []: a.shape = 2,5
46a3575919f5 Work on session 4, Arrays started.
Shantanu <shantanu@fossee.in>
parents: 40
diff changeset
   229
    Note that the total size of new array must be unchanged. 
46a3575919f5 Work on session 4, Arrays started.
Shantanu <shantanu@fossee.in>
parents: 40
diff changeset
   230
46a3575919f5 Work on session 4, Arrays started.
Shantanu <shantanu@fossee.in>
parents: 40
diff changeset
   231
    We type a, to see what it looks like
46a3575919f5 Work on session 4, Arrays started.
Shantanu <shantanu@fossee.in>
parents: 40
diff changeset
   232
    In []: a
46a3575919f5 Work on session 4, Arrays started.
Shantanu <shantanu@fossee.in>
parents: 40
diff changeset
   233
46a3575919f5 Work on session 4, Arrays started.
Shantanu <shantanu@fossee.in>
parents: 40
diff changeset
   234
    ones command can be used to get an array with all the entries as
46a3575919f5 Work on session 4, Arrays started.
Shantanu <shantanu@fossee.in>
parents: 40
diff changeset
   235
    ones. We pass it the shape of the array that we require. 
46a3575919f5 Work on session 4, Arrays started.
Shantanu <shantanu@fossee.in>
parents: 40
diff changeset
   236
    
46a3575919f5 Work on session 4, Arrays started.
Shantanu <shantanu@fossee.in>
parents: 40
diff changeset
   237
    In []: 
46a3575919f5 Work on session 4, Arrays started.
Shantanu <shantanu@fossee.in>
parents: 40
diff changeset
   238
46a3575919f5 Work on session 4, Arrays started.
Shantanu <shantanu@fossee.in>
parents: 40
diff changeset
   239
    Look at b, by printing it out. 
46a3575919f5 Work on session 4, Arrays started.
Shantanu <shantanu@fossee.in>
parents: 40
diff changeset
   240
    In []: b 
46a3575919f5 Work on session 4, Arrays started.
Shantanu <shantanu@fossee.in>
parents: 40
diff changeset
   241
46a3575919f5 Work on session 4, Arrays started.
Shantanu <shantanu@fossee.in>
parents: 40
diff changeset
   242
    To create an array with all entries as ones, with it's shape
46a3575919f5 Work on session 4, Arrays started.
Shantanu <shantanu@fossee.in>
parents: 40
diff changeset
   243
    similar to an already existing array, we use the ones_like
46a3575919f5 Work on session 4, Arrays started.
Shantanu <shantanu@fossee.in>
parents: 40
diff changeset
   244
    command.  
46a3575919f5 Work on session 4, Arrays started.
Shantanu <shantanu@fossee.in>
parents: 40
diff changeset
   245
    In []: b = ones_like(a)
46a3575919f5 Work on session 4, Arrays started.
Shantanu <shantanu@fossee.in>
parents: 40
diff changeset
   246
46a3575919f5 Work on session 4, Arrays started.
Shantanu <shantanu@fossee.in>
parents: 40
diff changeset
   247
    zeros and zeros_like are similar commands that can give you arrays
46a3575919f5 Work on session 4, Arrays started.
Shantanu <shantanu@fossee.in>
parents: 40
diff changeset
   248
    with all zeros. empty and empty_like give you empty arrays (arrays
46a3575919f5 Work on session 4, Arrays started.
Shantanu <shantanu@fossee.in>
parents: 40
diff changeset
   249
    with no initialization done.)
46a3575919f5 Work on session 4, Arrays started.
Shantanu <shantanu@fossee.in>
parents: 40
diff changeset
   250
46a3575919f5 Work on session 4, Arrays started.
Shantanu <shantanu@fossee.in>
parents: 40
diff changeset
   251
    In []: b = zeros((3, 4))
46a3575919f5 Work on session 4, Arrays started.
Shantanu <shantanu@fossee.in>
parents: 40
diff changeset
   252
    In []: b = zeros_like(a)
46a3575919f5 Work on session 4, Arrays started.
Shantanu <shantanu@fossee.in>
parents: 40
diff changeset
   253
46a3575919f5 Work on session 4, Arrays started.
Shantanu <shantanu@fossee.in>
parents: 40
diff changeset
   254
    The identity command can be used to obtain a square array with
46a3575919f5 Work on session 4, Arrays started.
Shantanu <shantanu@fossee.in>
parents: 40
diff changeset
   255
    ones on the main diagonal. 
46a3575919f5 Work on session 4, Arrays started.
Shantanu <shantanu@fossee.in>
parents: 40
diff changeset
   256
    
46a3575919f5 Work on session 4, Arrays started.
Shantanu <shantanu@fossee.in>
parents: 40
diff changeset
   257
    In []: identity(3)
46a3575919f5 Work on session 4, Arrays started.
Shantanu <shantanu@fossee.in>
parents: 40
diff changeset
   258
46a3575919f5 Work on session 4, Arrays started.
Shantanu <shantanu@fossee.in>
parents: 40
diff changeset
   259
    To obtain a 2-D array, that is not necessarily square, eye command
46a3575919f5 Work on session 4, Arrays started.
Shantanu <shantanu@fossee.in>
parents: 40
diff changeset
   260
    can be used. Look at the documentation of eye (using eye?) for
46a3575919f5 Work on session 4, Arrays started.
Shantanu <shantanu@fossee.in>
parents: 40
diff changeset
   261
    more info. 
46a3575919f5 Work on session 4, Arrays started.
Shantanu <shantanu@fossee.in>
parents: 40
diff changeset
   262
46a3575919f5 Work on session 4, Arrays started.
Shantanu <shantanu@fossee.in>
parents: 40
diff changeset
   263
    ---
46a3575919f5 Work on session 4, Arrays started.
Shantanu <shantanu@fossee.in>
parents: 40
diff changeset
   264
    
46a3575919f5 Work on session 4, Arrays started.
Shantanu <shantanu@fossee.in>
parents: 40
diff changeset
   265
    Now that we have learnt how to create arrays, let's move on to
46a3575919f5 Work on session 4, Arrays started.
Shantanu <shantanu@fossee.in>
parents: 40
diff changeset
   266
    accessing elements and changing them. 
46a3575919f5 Work on session 4, Arrays started.
Shantanu <shantanu@fossee.in>
parents: 40
diff changeset
   267
    
46a3575919f5 Work on session 4, Arrays started.
Shantanu <shantanu@fossee.in>
parents: 40
diff changeset
   268
    Let's work with the c, array which we had already created. 
46a3575919f5 Work on session 4, Arrays started.
Shantanu <shantanu@fossee.in>
parents: 40
diff changeset
   269
46a3575919f5 Work on session 4, Arrays started.
Shantanu <shantanu@fossee.in>
parents: 40
diff changeset
   270
    In []: c 
46a3575919f5 Work on session 4, Arrays started.
Shantanu <shantanu@fossee.in>
parents: 40
diff changeset
   271
46a3575919f5 Work on session 4, Arrays started.
Shantanu <shantanu@fossee.in>
parents: 40
diff changeset
   272
    Let's say we want to access the element 23 in c, we say
46a3575919f5 Work on session 4, Arrays started.
Shantanu <shantanu@fossee.in>
parents: 40
diff changeset
   273
46a3575919f5 Work on session 4, Arrays started.
Shantanu <shantanu@fossee.in>
parents: 40
diff changeset
   274
    In []: c[1][2]
46a3575919f5 Work on session 4, Arrays started.
Shantanu <shantanu@fossee.in>
parents: 40
diff changeset
   275
    Note that this is similar to accessing an element inside a list of
46a3575919f5 Work on session 4, Arrays started.
Shantanu <shantanu@fossee.in>
parents: 40
diff changeset
   276
    lists. Also, note that counting again starts from 0. 
46a3575919f5 Work on session 4, Arrays started.
Shantanu <shantanu@fossee.in>
parents: 40
diff changeset
   277
    
46a3575919f5 Work on session 4, Arrays started.
Shantanu <shantanu@fossee.in>
parents: 40
diff changeset
   278
    But arrays provide a more convenient way to access the elements. 
46a3575919f5 Work on session 4, Arrays started.
Shantanu <shantanu@fossee.in>
parents: 40
diff changeset
   279
    In []: c[1, 2]
46a3575919f5 Work on session 4, Arrays started.
Shantanu <shantanu@fossee.in>
parents: 40
diff changeset
   280
    
46a3575919f5 Work on session 4, Arrays started.
Shantanu <shantanu@fossee.in>
parents: 40
diff changeset
   281
    Now, we can also change the element using a simple assignment. 
46a3575919f5 Work on session 4, Arrays started.
Shantanu <shantanu@fossee.in>
parents: 40
diff changeset
   282
    In []: c[1, 2] = -23
46a3575919f5 Work on session 4, Arrays started.
Shantanu <shantanu@fossee.in>
parents: 40
diff changeset
   283
46a3575919f5 Work on session 4, Arrays started.
Shantanu <shantanu@fossee.in>
parents: 40
diff changeset
   284
    Let's look at accessing more than one elements at a time. We begin
46a3575919f5 Work on session 4, Arrays started.
Shantanu <shantanu@fossee.in>
parents: 40
diff changeset
   285
    with accessing rows. 
46a3575919f5 Work on session 4, Arrays started.
Shantanu <shantanu@fossee.in>
parents: 40
diff changeset
   286
    In []: c[1] gives us the second row. (counting starts from 0)
46a3575919f5 Work on session 4, Arrays started.
Shantanu <shantanu@fossee.in>
parents: 40
diff changeset
   287
46a3575919f5 Work on session 4, Arrays started.
Shantanu <shantanu@fossee.in>
parents: 40
diff changeset
   288
    To get a column, we use a syntax that is similar to the one used
46a3575919f5 Work on session 4, Arrays started.
Shantanu <shantanu@fossee.in>
parents: 40
diff changeset
   289
    to access a single element. 
46a3575919f5 Work on session 4, Arrays started.
Shantanu <shantanu@fossee.in>
parents: 40
diff changeset
   290
    In []: c[:,1], gives us the first column. 
46a3575919f5 Work on session 4, Arrays started.
Shantanu <shantanu@fossee.in>
parents: 40
diff changeset
   291
    
46a3575919f5 Work on session 4, Arrays started.
Shantanu <shantanu@fossee.in>
parents: 40
diff changeset
   292
    The colon specifies that we wish to obtain all elements in that
46a3575919f5 Work on session 4, Arrays started.
Shantanu <shantanu@fossee.in>
parents: 40
diff changeset
   293
    dimension from the array.  
46a3575919f5 Work on session 4, Arrays started.
Shantanu <shantanu@fossee.in>
parents: 40
diff changeset
   294
46a3575919f5 Work on session 4, Arrays started.
Shantanu <shantanu@fossee.in>
parents: 40
diff changeset
   295
    So, we could use a more explicit way to access the second row of
46a3575919f5 Work on session 4, Arrays started.
Shantanu <shantanu@fossee.in>
parents: 40
diff changeset
   296
    the array. 
46a3575919f5 Work on session 4, Arrays started.
Shantanu <shantanu@fossee.in>
parents: 40
diff changeset
   297
    In []: c[1,:]
46a3575919f5 Work on session 4, Arrays started.
Shantanu <shantanu@fossee.in>
parents: 40
diff changeset
   298
    
46a3575919f5 Work on session 4, Arrays started.
Shantanu <shantanu@fossee.in>
parents: 40
diff changeset
   299
    The colon can be used to access specific portions of the array,
46a3575919f5 Work on session 4, Arrays started.
Shantanu <shantanu@fossee.in>
parents: 40
diff changeset
   300
    similar to the way we do with lists. 
46a3575919f5 Work on session 4, Arrays started.
Shantanu <shantanu@fossee.in>
parents: 40
diff changeset
   301
    In []: c[1,1:3]
46a3575919f5 Work on session 4, Arrays started.
Shantanu <shantanu@fossee.in>
parents: 40
diff changeset
   302
    Observe that we get the second and third columns from the second
46a3575919f5 Work on session 4, Arrays started.
Shantanu <shantanu@fossee.in>
parents: 40
diff changeset
   303
    row. As with lists, the number after the colon is excluded when
46a3575919f5 Work on session 4, Arrays started.
Shantanu <shantanu@fossee.in>
parents: 40
diff changeset
   304
    slicing a portion of the array. 
46a3575919f5 Work on session 4, Arrays started.
Shantanu <shantanu@fossee.in>
parents: 40
diff changeset
   305
46a3575919f5 Work on session 4, Arrays started.
Shantanu <shantanu@fossee.in>
parents: 40
diff changeset
   306
    In []: c[1:3,1]
46a3575919f5 Work on session 4, Arrays started.
Shantanu <shantanu@fossee.in>
parents: 40
diff changeset
   307
    Now, we get the second and third rows from the first column. 
46a3575919f5 Work on session 4, Arrays started.
Shantanu <shantanu@fossee.in>
parents: 40
diff changeset
   308
46a3575919f5 Work on session 4, Arrays started.
Shantanu <shantanu@fossee.in>
parents: 40
diff changeset
   309
    In []: c[1:3,1:3]
46a3575919f5 Work on session 4, Arrays started.
Shantanu <shantanu@fossee.in>
parents: 40
diff changeset
   310
    We get the second and third rows and the second and third
46a3575919f5 Work on session 4, Arrays started.
Shantanu <shantanu@fossee.in>
parents: 40
diff changeset
   311
    columns. 
46a3575919f5 Work on session 4, Arrays started.
Shantanu <shantanu@fossee.in>
parents: 40
diff changeset
   312
46a3575919f5 Work on session 4, Arrays started.
Shantanu <shantanu@fossee.in>
parents: 40
diff changeset
   313
    The numbers before and after the colons are optional. If the
46a3575919f5 Work on session 4, Arrays started.
Shantanu <shantanu@fossee.in>
parents: 40
diff changeset
   314
    number before the colon is omitted, it is assumed to be zero by
46a3575919f5 Work on session 4, Arrays started.
Shantanu <shantanu@fossee.in>
parents: 40
diff changeset
   315
    default. If the element after the colon is omitted, it is assumed
46a3575919f5 Work on session 4, Arrays started.
Shantanu <shantanu@fossee.in>
parents: 40
diff changeset
   316
    to be until the end. 
46a3575919f5 Work on session 4, Arrays started.
Shantanu <shantanu@fossee.in>
parents: 40
diff changeset
   317
46a3575919f5 Work on session 4, Arrays started.
Shantanu <shantanu@fossee.in>
parents: 40
diff changeset
   318
    In []: c[1:, 1:]
46a3575919f5 Work on session 4, Arrays started.
Shantanu <shantanu@fossee.in>
parents: 40
diff changeset
   319
    This is essentially similar to the previous example. We are using
46a3575919f5 Work on session 4, Arrays started.
Shantanu <shantanu@fossee.in>
parents: 40
diff changeset
   320
    the default value i.e, the end, instead of specifying 3,
46a3575919f5 Work on session 4, Arrays started.
Shantanu <shantanu@fossee.in>
parents: 40
diff changeset
   321
    explicitly. 
46a3575919f5 Work on session 4, Arrays started.
Shantanu <shantanu@fossee.in>
parents: 40
diff changeset
   322
46a3575919f5 Work on session 4, Arrays started.
Shantanu <shantanu@fossee.in>
parents: 40
diff changeset
   323
    In []: c[:2, :2]
46a3575919f5 Work on session 4, Arrays started.
Shantanu <shantanu@fossee.in>
parents: 40
diff changeset
   324
    We have omitted specifying the zero before the colon, explicitly. 
46a3575919f5 Work on session 4, Arrays started.
Shantanu <shantanu@fossee.in>
parents: 40
diff changeset
   325
46a3575919f5 Work on session 4, Arrays started.
Shantanu <shantanu@fossee.in>
parents: 40
diff changeset
   326
    --- 
46a3575919f5 Work on session 4, Arrays started.
Shantanu <shantanu@fossee.in>
parents: 40
diff changeset
   327
    
46a3575919f5 Work on session 4, Arrays started.
Shantanu <shantanu@fossee.in>
parents: 40
diff changeset
   328
    You may have observed the similarity of the semi-colon notation to
46a3575919f5 Work on session 4, Arrays started.
Shantanu <shantanu@fossee.in>
parents: 40
diff changeset
   329
    the notation used in lists. As expected, the semi-colon notation
46a3575919f5 Work on session 4, Arrays started.
Shantanu <shantanu@fossee.in>
parents: 40
diff changeset
   330
    also provides a way to specify a jump. This {concept/idea} is
46a3575919f5 Work on session 4, Arrays started.
Shantanu <shantanu@fossee.in>
parents: 40
diff changeset
   331
    termed as Striding. 
46a3575919f5 Work on session 4, Arrays started.
Shantanu <shantanu@fossee.in>
parents: 40
diff changeset
   332
46a3575919f5 Work on session 4, Arrays started.
Shantanu <shantanu@fossee.in>
parents: 40
diff changeset
   333
    To get every alternate row of c, starting from the first one, we say
46a3575919f5 Work on session 4, Arrays started.
Shantanu <shantanu@fossee.in>
parents: 40
diff changeset
   334
    In []: c[::2,:]
46a3575919f5 Work on session 4, Arrays started.
Shantanu <shantanu@fossee.in>
parents: 40
diff changeset
   335
46a3575919f5 Work on session 4, Arrays started.
Shantanu <shantanu@fossee.in>
parents: 40
diff changeset
   336
    To get every alternate row of c, starting from the second one, we
46a3575919f5 Work on session 4, Arrays started.
Shantanu <shantanu@fossee.in>
parents: 40
diff changeset
   337
    say 
46a3575919f5 Work on session 4, Arrays started.
Shantanu <shantanu@fossee.in>
parents: 40
diff changeset
   338
    In []: c[1::2,:]
46a3575919f5 Work on session 4, Arrays started.
Shantanu <shantanu@fossee.in>
parents: 40
diff changeset
   339
46a3575919f5 Work on session 4, Arrays started.
Shantanu <shantanu@fossee.in>
parents: 40
diff changeset
   340
46a3575919f5 Work on session 4, Arrays started.
Shantanu <shantanu@fossee.in>
parents: 40
diff changeset
   341
    In []: c[:,::2]
46a3575919f5 Work on session 4, Arrays started.
Shantanu <shantanu@fossee.in>
parents: 40
diff changeset
   342
    In []: c[::2,::2]
46a3575919f5 Work on session 4, Arrays started.
Shantanu <shantanu@fossee.in>
parents: 40
diff changeset
   343
46a3575919f5 Work on session 4, Arrays started.
Shantanu <shantanu@fossee.in>
parents: 40
diff changeset
   344
    ---
46a3575919f5 Work on session 4, Arrays started.
Shantanu <shantanu@fossee.in>
parents: 40
diff changeset
   345
46a3575919f5 Work on session 4, Arrays started.
Shantanu <shantanu@fossee.in>
parents: 40
diff changeset
   346
    We come to the end of this tutorial on arrays. In this tutorial,
46a3575919f5 Work on session 4, Arrays started.
Shantanu <shantanu@fossee.in>
parents: 40
diff changeset
   347
    you've learnt how to create arrays and access, change elements. 
46a3575919f5 Work on session 4, Arrays started.
Shantanu <shantanu@fossee.in>
parents: 40
diff changeset
   348
46a3575919f5 Work on session 4, Arrays started.
Shantanu <shantanu@fossee.in>
parents: 40
diff changeset
   349
    Thank you. 
46a3575919f5 Work on session 4, Arrays started.
Shantanu <shantanu@fossee.in>
parents: 40
diff changeset
   350
40
6e3526275a00 Adding arrays.txt file , script for arrays tutorial , session 4
amit@thunder
parents:
diff changeset
   351
Hello friends and welcome to the second tutorial in the series of spoken tutorials on Python for Scientific computing. 
6e3526275a00 Adding arrays.txt file , script for arrays tutorial , session 4
amit@thunder
parents:
diff changeset
   352
6e3526275a00 Adding arrays.txt file , script for arrays tutorial , session 4
amit@thunder
parents:
diff changeset
   353
In the previous tutorial we learnt about arrays and we told you that numpy arrays are faster and more efficient . In this tutorial we shall look at creating arrays, accessing elements and changing them. 
6e3526275a00 Adding arrays.txt file , script for arrays tutorial , session 4
amit@thunder
parents:
diff changeset
   354
6e3526275a00 Adding arrays.txt file , script for arrays tutorial , session 4
amit@thunder
parents:
diff changeset
   355
6e3526275a00 Adding arrays.txt file , script for arrays tutorial , session 4
amit@thunder
parents:
diff changeset
   356
Let's start with creating simple arrays. We've already seen how to convert lists to arrays. Inputting a new array is similarto that. 
6e3526275a00 Adding arrays.txt file , script for arrays tutorial , session 4
amit@thunder
parents:
diff changeset
   357
54
46a3575919f5 Work on session 4, Arrays started.
Shantanu <shantanu@fossee.in>
parents: 40
diff changeset
   358
On your Ipython terminal type a = array open parenthesis and then open square brackets 5,8,10,13 close square brackets and close parenthesis . This create an array a . You can see what a is by typing a on the terminal .
69
5452f6b11fe6 Minor edits.
Santosh G. Vattam <vattam.santosh@gmail.com>
parents: 67
diff changeset
   359
Now we shall try to create a multi-dimensional array type in your ipython terminal
5452f6b11fe6 Minor edits.
Santosh G. Vattam <vattam.santosh@gmail.com>
parents: 67
diff changeset
   360
c= array open parenthesis , then open square brackets 11,12,13 close square bracket 'comma' start square bracket 21 , 22 ,23close square bracket 'comma' open 31,32,33 close square bracket another close square bracket which closes the first sqaure bracket and parenthesis which closes the first parenthesis . Now to see the dimensions of the array c we do c.shape . We can see that c is a 3 by 3 matrix .
40
6e3526275a00 Adding arrays.txt file , script for arrays tutorial , session 4
amit@thunder
parents:
diff changeset
   361
69
5452f6b11fe6 Minor edits.
Santosh G. Vattam <vattam.santosh@gmail.com>
parents: 67
diff changeset
   362
There are other special methods of creating arrays as well we shall now look at them .
40
6e3526275a00 Adding arrays.txt file , script for arrays tutorial , session 4
amit@thunder
parents:
diff changeset
   363
The first one is the command arange which is similar to range except that it returns an array.
69
5452f6b11fe6 Minor edits.
Santosh G. Vattam <vattam.santosh@gmail.com>
parents: 67
diff changeset
   364
We type on our Ipython interpreter a = arange(10). We see what a is now . Type a . As we can see This returns us an array of one dimension and has 10 elements .  
40
6e3526275a00 Adding arrays.txt file , script for arrays tutorial , session 4
amit@thunder
parents:
diff changeset
   365
Ones can be use to get all entries as ones . We can pass it the shape of the array as required .
6e3526275a00 Adding arrays.txt file , script for arrays tutorial , session 4
amit@thunder
parents:
diff changeset
   366
type b=ones open parenthesis , another open parenthesis , 3,4 , close second parenthesis and close first parenthesis . Look at b , by printing it out .
6e3526275a00 Adding arrays.txt file , script for arrays tutorial , session 4
amit@thunder
parents:
diff changeset
   367
To create an array with all entries as ones, with it's shape similar to an already existing array, we use the ones_like
54
46a3575919f5 Work on session 4, Arrays started.
Shantanu <shantanu@fossee.in>
parents: 40
diff changeset
   368
command.  type b= ones_like in parenthesis a .