arrays.txt
author Santosh G. Vattam <vattam.santosh@gmail.com>
Thu, 15 Apr 2010 15:49:13 +0530
changeset 69 5452f6b11fe6
parent 67 806cca3b7231
child 70 c172d36d9a76
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.
806cca3b7231 Minor edits.
Santosh G. Vattam <vattam.santosh@gmail.com>
parents: 61
diff changeset
     3
We have already seen in previous session that how arrays are better suited for certain mathematical operations. In this session we are going to cover more details on using Arrays as matrices, such as, how to create them, how to initialize them, how to manipulate and use them for solving given problem.
54
46a3575919f5 Work on session 4, Arrays started.
Shantanu <shantanu@fossee.in>
parents: 40
diff changeset
     4
67
806cca3b7231 Minor edits.
Santosh G. Vattam <vattam.santosh@gmail.com>
parents: 61
diff changeset
     5
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
     6
a equal to array([5, 8, 10, 13])
54
46a3575919f5 Work on session 4, Arrays started.
Shantanu <shantanu@fossee.in>
parents: 40
diff changeset
     7
67
806cca3b7231 Minor edits.
Santosh G. Vattam <vattam.santosh@gmail.com>
parents: 61
diff changeset
     8
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
     9
a
46a3575919f5 Work on session 4, Arrays started.
Shantanu <shantanu@fossee.in>
parents: 40
diff changeset
    10
67
806cca3b7231 Minor edits.
Santosh G. Vattam <vattam.santosh@gmail.com>
parents: 61
diff changeset
    11
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
    12
46a3575919f5 Work on session 4, Arrays started.
Shantanu <shantanu@fossee.in>
parents: 40
diff changeset
    13
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
    14
46a3575919f5 Work on session 4, Arrays started.
Shantanu <shantanu@fossee.in>
parents: 40
diff changeset
    15
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
    16
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
    17
a.shape
46a3575919f5 Work on session 4, Arrays started.
Shantanu <shantanu@fossee.in>
parents: 40
diff changeset
    18
c.shape
46a3575919f5 Work on session 4, Arrays started.
Shantanu <shantanu@fossee.in>
parents: 40
diff changeset
    19
67
806cca3b7231 Minor edits.
Santosh G. Vattam <vattam.santosh@gmail.com>
parents: 61
diff changeset
    20
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
    21
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
    22
b = ones((3, 4))
69
5452f6b11fe6 Minor edits.
Santosh G. Vattam <vattam.santosh@gmail.com>
parents: 67
diff changeset
    23
and b is
54
46a3575919f5 Work on session 4, Arrays started.
Shantanu <shantanu@fossee.in>
parents: 40
diff changeset
    24
b
69
5452f6b11fe6 Minor edits.
Santosh G. Vattam <vattam.santosh@gmail.com>
parents: 67
diff changeset
    25
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
    26
d = ones_like(c)
69
5452f6b11fe6 Minor edits.
Santosh G. Vattam <vattam.santosh@gmail.com>
parents: 67
diff changeset
    27
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
    28
69
5452f6b11fe6 Minor edits.
Santosh G. Vattam <vattam.santosh@gmail.com>
parents: 67
diff changeset
    29
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
    30
i = identity(3)
46a3575919f5 Work on session 4, Arrays started.
Shantanu <shantanu@fossee.in>
parents: 40
diff changeset
    31
i
46a3575919f5 Work on session 4, Arrays started.
Shantanu <shantanu@fossee.in>
parents: 40
diff changeset
    32
i = identity(5)
46a3575919f5 Work on session 4, Arrays started.
Shantanu <shantanu@fossee.in>
parents: 40
diff changeset
    33
i
46a3575919f5 Work on session 4, Arrays started.
Shantanu <shantanu@fossee.in>
parents: 40
diff changeset
    34
69
5452f6b11fe6 Minor edits.
Santosh G. Vattam <vattam.santosh@gmail.com>
parents: 67
diff changeset
    35
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
    36
55
1fe734b20950 Added slicing and striding part.
Shantanu <shantanu@fossee.in>
parents: 54
diff changeset
    37
----------------
69
5452f6b11fe6 Minor edits.
Santosh G. Vattam <vattam.santosh@gmail.com>
parents: 67
diff changeset
    38
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
    39
Remember we created a 3x3 matrix earlier, 
55
1fe734b20950 Added slicing and striding part.
Shantanu <shantanu@fossee.in>
parents: 54
diff changeset
    40
c
1fe734b20950 Added slicing and striding part.
Shantanu <shantanu@fossee.in>
parents: 54
diff changeset
    41
1fe734b20950 Added slicing and striding part.
Shantanu <shantanu@fossee.in>
parents: 54
diff changeset
    42
to access the element 23 we type
1fe734b20950 Added slicing and striding part.
Shantanu <shantanu@fossee.in>
parents: 54
diff changeset
    43
c[1][2]
1fe734b20950 Added slicing and striding part.
Shantanu <shantanu@fossee.in>
parents: 54
diff changeset
    44
69
5452f6b11fe6 Minor edits.
Santosh G. Vattam <vattam.santosh@gmail.com>
parents: 67
diff changeset
    45
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
    46
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
    47
c[1, 2]
1fe734b20950 Added slicing and striding part.
Shantanu <shantanu@fossee.in>
parents: 54
diff changeset
    48
1fe734b20950 Added slicing and striding part.
Shantanu <shantanu@fossee.in>
parents: 54
diff changeset
    49
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
    50
1fe734b20950 Added slicing and striding part.
Shantanu <shantanu@fossee.in>
parents: 54
diff changeset
    51
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
    52
c[1]
69
5452f6b11fe6 Minor edits.
Santosh G. Vattam <vattam.santosh@gmail.com>
parents: 67
diff changeset
    53
gives us the entire second row. 
55
1fe734b20950 Added slicing and striding part.
Shantanu <shantanu@fossee.in>
parents: 54
diff changeset
    54
69
5452f6b11fe6 Minor edits.
Santosh G. Vattam <vattam.santosh@gmail.com>
parents: 67
diff changeset
    55
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
    56
c[1, 1] = -22
1fe734b20950 Added slicing and striding part.
Shantanu <shantanu@fossee.in>
parents: 54
diff changeset
    57
c
1fe734b20950 Added slicing and striding part.
Shantanu <shantanu@fossee.in>
parents: 54
diff changeset
    58
69
5452f6b11fe6 Minor edits.
Santosh G. Vattam <vattam.santosh@gmail.com>
parents: 67
diff changeset
    59
In order to change an entire row we type:
55
1fe734b20950 Added slicing and striding part.
Shantanu <shantanu@fossee.in>
parents: 54
diff changeset
    60
c[1] = 0
1fe734b20950 Added slicing and striding part.
Shantanu <shantanu@fossee.in>
parents: 54
diff changeset
    61
c
69
5452f6b11fe6 Minor edits.
Santosh G. Vattam <vattam.santosh@gmail.com>
parents: 67
diff changeset
    62
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
    63
1fe734b20950 Added slicing and striding part.
Shantanu <shantanu@fossee.in>
parents: 54
diff changeset
    64
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
    65
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
    66
c[:,2]
69
5452f6b11fe6 Minor edits.
Santosh G. Vattam <vattam.santosh@gmail.com>
parents: 67
diff changeset
    67
returns the third column.
55
1fe734b20950 Added slicing and striding part.
Shantanu <shantanu@fossee.in>
parents: 54
diff changeset
    68
here the ':' part mentioned for row value symbolises entire row.
1fe734b20950 Added slicing and striding part.
Shantanu <shantanu@fossee.in>
parents: 54
diff changeset
    69
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
    70
1fe734b20950 Added slicing and striding part.
Shantanu <shantanu@fossee.in>
parents: 54
diff changeset
    71
':' actually takes two value. for any row or column we can mention
1fe734b20950 Added slicing and striding part.
Shantanu <shantanu@fossee.in>
parents: 54
diff changeset
    72
start:end values, and rows/columns starting for 'start' till 'end' will be returned. Lets try some examples for better understanding
1fe734b20950 Added slicing and striding part.
Shantanu <shantanu@fossee.in>
parents: 54
diff changeset
    73
c[0:2,:]
69
5452f6b11fe6 Minor edits.
Santosh G. Vattam <vattam.santosh@gmail.com>
parents: 67
diff changeset
    74
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
    75
1fe734b20950 Added slicing and striding part.
Shantanu <shantanu@fossee.in>
parents: 54
diff changeset
    76
c[1:3,:] 
1fe734b20950 Added slicing and striding part.
Shantanu <shantanu@fossee.in>
parents: 54
diff changeset
    77
gives second and third row.
1fe734b20950 Added slicing and striding part.
Shantanu <shantanu@fossee.in>
parents: 54
diff changeset
    78
1fe734b20950 Added slicing and striding part.
Shantanu <shantanu@fossee.in>
parents: 54
diff changeset
    79
similarly we can try this on columns also:
1fe734b20950 Added slicing and striding part.
Shantanu <shantanu@fossee.in>
parents: 54
diff changeset
    80
c[:, 0:2] gives us first two column
1fe734b20950 Added slicing and striding part.
Shantanu <shantanu@fossee.in>
parents: 54
diff changeset
    81
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
    82
1fe734b20950 Added slicing and striding part.
Shantanu <shantanu@fossee.in>
parents: 54
diff changeset
    83
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
    84
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
    85
1fe734b20950 Added slicing and striding part.
Shantanu <shantanu@fossee.in>
parents: 54
diff changeset
    86
so
1fe734b20950 Added slicing and striding part.
Shantanu <shantanu@fossee.in>
parents: 54
diff changeset
    87
c[:, :2]
69
5452f6b11fe6 Minor edits.
Santosh G. Vattam <vattam.santosh@gmail.com>
parents: 67
diff changeset
    88
also gives us first two columns
5452f6b11fe6 Minor edits.
Santosh G. Vattam <vattam.santosh@gmail.com>
parents: 67
diff changeset
    89
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
    90
1fe734b20950 Added slicing and striding part.
Shantanu <shantanu@fossee.in>
parents: 54
diff changeset
    91
c[1:, :2]
69
5452f6b11fe6 Minor edits.
Santosh G. Vattam <vattam.santosh@gmail.com>
parents: 67
diff changeset
    92
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
    93
69
5452f6b11fe6 Minor edits.
Santosh G. Vattam <vattam.santosh@gmail.com>
parents: 67
diff changeset
    94
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
    95
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
    96
c[:,:] gives us entire array
55
1fe734b20950 Added slicing and striding part.
Shantanu <shantanu@fossee.in>
parents: 54
diff changeset
    97
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
    98
c[:, ::2]
69
5452f6b11fe6 Minor edits.
Santosh G. Vattam <vattam.santosh@gmail.com>
parents: 67
diff changeset
    99
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
   100
similarly 
69
5452f6b11fe6 Minor edits.
Santosh G. Vattam <vattam.santosh@gmail.com>
parents: 67
diff changeset
   101
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
   102
69
5452f6b11fe6 Minor edits.
Santosh G. Vattam <vattam.santosh@gmail.com>
parents: 67
diff changeset
   103
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
   104
56
86c862b3dbef First cut for arrays and matrices.
Shantanu <shantanu@fossee.in>
parents: 55
diff changeset
   105
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
   106
69
5452f6b11fe6 Minor edits.
Santosh G. Vattam <vattam.santosh@gmail.com>
parents: 67
diff changeset
   107
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
   108
86c862b3dbef First cut for arrays and matrices.
Shantanu <shantanu@fossee.in>
parents: 55
diff changeset
   109
a = imread('lena.png')
86c862b3dbef First cut for arrays and matrices.
Shantanu <shantanu@fossee.in>
parents: 55
diff changeset
   110
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
   111
a.shape
86c862b3dbef First cut for arrays and matrices.
Shantanu <shantanu@fossee.in>
parents: 55
diff changeset
   112
86c862b3dbef First cut for arrays and matrices.
Shantanu <shantanu@fossee.in>
parents: 55
diff changeset
   113
its a 512x512x3 array.
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
to view the image write
86c862b3dbef First cut for arrays and matrices.
Shantanu <shantanu@fossee.in>
parents: 55
diff changeset
   116
imshow(a)
86c862b3dbef First cut for arrays and matrices.
Shantanu <shantanu@fossee.in>
parents: 55
diff changeset
   117
69
5452f6b11fe6 Minor edits.
Santosh G. Vattam <vattam.santosh@gmail.com>
parents: 67
diff changeset
   118
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
   119
imshow(a[:255,:255]) (half of 512 is 256)
86c862b3dbef First cut for arrays and matrices.
Shantanu <shantanu@fossee.in>
parents: 55
diff changeset
   120
69
5452f6b11fe6 Minor edits.
Santosh G. Vattam <vattam.santosh@gmail.com>
parents: 67
diff changeset
   121
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
   122
imshow(a)
69
5452f6b11fe6 Minor edits.
Santosh G. Vattam <vattam.santosh@gmail.com>
parents: 67
diff changeset
   123
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
   124
imshow(a[200:400, 200:400])
86c862b3dbef First cut for arrays and matrices.
Shantanu <shantanu@fossee.in>
parents: 55
diff changeset
   125
69
5452f6b11fe6 Minor edits.
Santosh G. Vattam <vattam.santosh@gmail.com>
parents: 67
diff changeset
   126
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
   127
imshow(a[::2, ::2])
86c862b3dbef First cut for arrays and matrices.
Shantanu <shantanu@fossee.in>
parents: 55
diff changeset
   128
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
   129
-------------------------
86c862b3dbef First cut for arrays and matrices.
Shantanu <shantanu@fossee.in>
parents: 55
diff changeset
   130
86c862b3dbef First cut for arrays and matrices.
Shantanu <shantanu@fossee.in>
parents: 55
diff changeset
   131
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
   132
86c862b3dbef First cut for arrays and matrices.
Shantanu <shantanu@fossee.in>
parents: 55
diff changeset
   133
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
   134
a
86c862b3dbef First cut for arrays and matrices.
Shantanu <shantanu@fossee.in>
parents: 55
diff changeset
   135
86c862b3dbef First cut for arrays and matrices.
Shantanu <shantanu@fossee.in>
parents: 55
diff changeset
   136
To get transpose of this matrix write
86c862b3dbef First cut for arrays and matrices.
Shantanu <shantanu@fossee.in>
parents: 55
diff changeset
   137
a.T
69
5452f6b11fe6 Minor edits.
Santosh G. Vattam <vattam.santosh@gmail.com>
parents: 67
diff changeset
   138
5452f6b11fe6 Minor edits.
Santosh G. Vattam <vattam.santosh@gmail.com>
parents: 67
diff changeset
   139
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
   140
sum(a)
86c862b3dbef First cut for arrays and matrices.
Shantanu <shantanu@fossee.in>
parents: 55
diff changeset
   141
69
5452f6b11fe6 Minor edits.
Santosh G. Vattam <vattam.santosh@gmail.com>
parents: 67
diff changeset
   142
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
   143
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
   144
69
5452f6b11fe6 Minor edits.
Santosh G. Vattam <vattam.santosh@gmail.com>
parents: 67
diff changeset
   145
+ takes care of matrix additions
56
86c862b3dbef First cut for arrays and matrices.
Shantanu <shantanu@fossee.in>
parents: 55
diff changeset
   146
a + b
86c862b3dbef First cut for arrays and matrices.
Shantanu <shantanu@fossee.in>
parents: 55
diff changeset
   147
86c862b3dbef First cut for arrays and matrices.
Shantanu <shantanu@fossee.in>
parents: 55
diff changeset
   148
lets try multiplication now, 
69
5452f6b11fe6 Minor edits.
Santosh G. Vattam <vattam.santosh@gmail.com>
parents: 67
diff changeset
   149
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
   150
86c862b3dbef First cut for arrays and matrices.
Shantanu <shantanu@fossee.in>
parents: 55
diff changeset
   151
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
   152
dot(a, b)
86c862b3dbef First cut for arrays and matrices.
Shantanu <shantanu@fossee.in>
parents: 55
diff changeset
   153
69
5452f6b11fe6 Minor edits.
Santosh G. Vattam <vattam.santosh@gmail.com>
parents: 67
diff changeset
   154
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
   155
86c862b3dbef First cut for arrays and matrices.
Shantanu <shantanu@fossee.in>
parents: 55
diff changeset
   156
inv(a)
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
det(a) returns determinant of matrix a
86c862b3dbef First cut for arrays and matrices.
Shantanu <shantanu@fossee.in>
parents: 55
diff changeset
   159
69
5452f6b11fe6 Minor edits.
Santosh G. Vattam <vattam.santosh@gmail.com>
parents: 67
diff changeset
   160
we shall create an array e
56
86c862b3dbef First cut for arrays and matrices.
Shantanu <shantanu@fossee.in>
parents: 55
diff changeset
   161
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
   162
and then to evaluate eigenvalues of array
69
5452f6b11fe6 Minor edits.
Santosh G. Vattam <vattam.santosh@gmail.com>
parents: 67
diff changeset
   163
eig(e)
56
86c862b3dbef First cut for arrays and matrices.
Shantanu <shantanu@fossee.in>
parents: 55
diff changeset
   164
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
   165
to get only eigen values use
69
5452f6b11fe6 Minor edits.
Santosh G. Vattam <vattam.santosh@gmail.com>
parents: 67
diff changeset
   166
eigvals(e)
56
86c862b3dbef First cut for arrays and matrices.
Shantanu <shantanu@fossee.in>
parents: 55
diff changeset
   167
86c862b3dbef First cut for arrays and matrices.
Shantanu <shantanu@fossee.in>
parents: 55
diff changeset
   168
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
   169
Initialization
86c862b3dbef First cut for arrays and matrices.
Shantanu <shantanu@fossee.in>
parents: 55
diff changeset
   170
Slicing
86c862b3dbef First cut for arrays and matrices.
Shantanu <shantanu@fossee.in>
parents: 55
diff changeset
   171
Striding
86c862b3dbef First cut for arrays and matrices.
Shantanu <shantanu@fossee.in>
parents: 55
diff changeset
   172
A bit of image processing
86c862b3dbef First cut for arrays and matrices.
Shantanu <shantanu@fossee.in>
parents: 55
diff changeset
   173
Functions available for arrays
61
38ef280b1408 Minor changes to arrays.txt.
Shantanu <shantanu@fossee.in>
parents: 56
diff changeset
   174
56
86c862b3dbef First cut for arrays and matrices.
Shantanu <shantanu@fossee.in>
parents: 55
diff changeset
   175
Thank you
55
1fe734b20950 Added slicing and striding part.
Shantanu <shantanu@fossee.in>
parents: 54
diff changeset
   176
1fe734b20950 Added slicing and striding part.
Shantanu <shantanu@fossee.in>
parents: 54
diff changeset
   177
----------------
54
46a3575919f5 Work on session 4, Arrays started.
Shantanu <shantanu@fossee.in>
parents: 40
diff changeset
   178
We have seen 
46a3575919f5 Work on session 4, Arrays started.
Shantanu <shantanu@fossee.in>
parents: 40
diff changeset
   179
    Welcome to the Tutorial on arrays. 
46a3575919f5 Work on session 4, Arrays started.
Shantanu <shantanu@fossee.in>
parents: 40
diff changeset
   180
46a3575919f5 Work on session 4, Arrays started.
Shantanu <shantanu@fossee.in>
parents: 40
diff changeset
   181
    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
   182
    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
   183
    accessing elements and changing them. 
46a3575919f5 Work on session 4, Arrays started.
Shantanu <shantanu@fossee.in>
parents: 40
diff changeset
   184
46a3575919f5 Work on session 4, Arrays started.
Shantanu <shantanu@fossee.in>
parents: 40
diff changeset
   185
    ---
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
    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
   188
    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
   189
46a3575919f5 Work on session 4, Arrays started.
Shantanu <shantanu@fossee.in>
parents: 40
diff changeset
   190
    In []: 
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
    Type /a/, to see what it is. 
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
    In []: a
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
    We enter a multi-dimensional array this way -
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
    In []: c = array([[11,12,13],
46a3575919f5 Work on session 4, Arrays started.
Shantanu <shantanu@fossee.in>
parents: 40
diff changeset
   199
                     [21,22,23],
46a3575919f5 Work on session 4, Arrays started.
Shantanu <shantanu@fossee.in>
parents: 40
diff changeset
   200
                      [31,32,33]])
46a3575919f5 Work on session 4, Arrays started.
Shantanu <shantanu@fossee.in>
parents: 40
diff changeset
   201
46a3575919f5 Work on session 4, Arrays started.
Shantanu <shantanu@fossee.in>
parents: 40
diff changeset
   202
    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
   203
		      
46a3575919f5 Work on session 4, Arrays started.
Shantanu <shantanu@fossee.in>
parents: 40
diff changeset
   204
    In []: c
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
    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
   207
    In []: c.shape 
46a3575919f5 Work on session 4, Arrays started.
Shantanu <shantanu@fossee.in>
parents: 40
diff changeset
   208
46a3575919f5 Work on session 4, Arrays started.
Shantanu <shantanu@fossee.in>
parents: 40
diff changeset
   209
    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
   210
    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
   211
    arrays. 
46a3575919f5 Work on session 4, Arrays started.
Shantanu <shantanu@fossee.in>
parents: 40
diff changeset
   212
46a3575919f5 Work on session 4, Arrays started.
Shantanu <shantanu@fossee.in>
parents: 40
diff changeset
   213
    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
   214
    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
   215
    float arguments. 
46a3575919f5 Work on session 4, Arrays started.
Shantanu <shantanu@fossee.in>
parents: 40
diff changeset
   216
    
46a3575919f5 Work on session 4, Arrays started.
Shantanu <shantanu@fossee.in>
parents: 40
diff changeset
   217
    In []: a = arange(10)
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
46a3575919f5 Work on session 4, Arrays started.
Shantanu <shantanu@fossee.in>
parents: 40
diff changeset
   220
    This is the array we just created. 
46a3575919f5 Work on session 4, Arrays started.
Shantanu <shantanu@fossee.in>
parents: 40
diff changeset
   221
    
46a3575919f5 Work on session 4, Arrays started.
Shantanu <shantanu@fossee.in>
parents: 40
diff changeset
   222
    In []: a.shape
46a3575919f5 Work on session 4, Arrays started.
Shantanu <shantanu@fossee.in>
parents: 40
diff changeset
   223
    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
   224
46a3575919f5 Work on session 4, Arrays started.
Shantanu <shantanu@fossee.in>
parents: 40
diff changeset
   225
    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
   226
    In []: a.shape = 2,5
46a3575919f5 Work on session 4, Arrays started.
Shantanu <shantanu@fossee.in>
parents: 40
diff changeset
   227
    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
   228
46a3575919f5 Work on session 4, Arrays started.
Shantanu <shantanu@fossee.in>
parents: 40
diff changeset
   229
    We type a, to see what it looks like
46a3575919f5 Work on session 4, Arrays started.
Shantanu <shantanu@fossee.in>
parents: 40
diff changeset
   230
    In []: a
46a3575919f5 Work on session 4, Arrays started.
Shantanu <shantanu@fossee.in>
parents: 40
diff changeset
   231
46a3575919f5 Work on session 4, Arrays started.
Shantanu <shantanu@fossee.in>
parents: 40
diff changeset
   232
    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
   233
    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
   234
    
46a3575919f5 Work on session 4, Arrays started.
Shantanu <shantanu@fossee.in>
parents: 40
diff changeset
   235
    In []: 
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
    Look at b, by printing it out. 
46a3575919f5 Work on session 4, Arrays started.
Shantanu <shantanu@fossee.in>
parents: 40
diff changeset
   238
    In []: b 
46a3575919f5 Work on session 4, Arrays started.
Shantanu <shantanu@fossee.in>
parents: 40
diff changeset
   239
46a3575919f5 Work on session 4, Arrays started.
Shantanu <shantanu@fossee.in>
parents: 40
diff changeset
   240
    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
   241
    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
   242
    command.  
46a3575919f5 Work on session 4, Arrays started.
Shantanu <shantanu@fossee.in>
parents: 40
diff changeset
   243
    In []: b = ones_like(a)
46a3575919f5 Work on session 4, Arrays started.
Shantanu <shantanu@fossee.in>
parents: 40
diff changeset
   244
46a3575919f5 Work on session 4, Arrays started.
Shantanu <shantanu@fossee.in>
parents: 40
diff changeset
   245
    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
   246
    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
   247
    with no initialization done.)
46a3575919f5 Work on session 4, Arrays started.
Shantanu <shantanu@fossee.in>
parents: 40
diff changeset
   248
46a3575919f5 Work on session 4, Arrays started.
Shantanu <shantanu@fossee.in>
parents: 40
diff changeset
   249
    In []: b = zeros((3, 4))
46a3575919f5 Work on session 4, Arrays started.
Shantanu <shantanu@fossee.in>
parents: 40
diff changeset
   250
    In []: b = zeros_like(a)
46a3575919f5 Work on session 4, Arrays started.
Shantanu <shantanu@fossee.in>
parents: 40
diff changeset
   251
46a3575919f5 Work on session 4, Arrays started.
Shantanu <shantanu@fossee.in>
parents: 40
diff changeset
   252
    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
   253
    ones on the main diagonal. 
46a3575919f5 Work on session 4, Arrays started.
Shantanu <shantanu@fossee.in>
parents: 40
diff changeset
   254
    
46a3575919f5 Work on session 4, Arrays started.
Shantanu <shantanu@fossee.in>
parents: 40
diff changeset
   255
    In []: identity(3)
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
    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
   258
    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
   259
    more info. 
46a3575919f5 Work on session 4, Arrays started.
Shantanu <shantanu@fossee.in>
parents: 40
diff changeset
   260
46a3575919f5 Work on session 4, Arrays started.
Shantanu <shantanu@fossee.in>
parents: 40
diff changeset
   261
    ---
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
    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
   264
    accessing elements and changing them. 
46a3575919f5 Work on session 4, Arrays started.
Shantanu <shantanu@fossee.in>
parents: 40
diff changeset
   265
    
46a3575919f5 Work on session 4, Arrays started.
Shantanu <shantanu@fossee.in>
parents: 40
diff changeset
   266
    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
   267
46a3575919f5 Work on session 4, Arrays started.
Shantanu <shantanu@fossee.in>
parents: 40
diff changeset
   268
    In []: c 
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
    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
   271
46a3575919f5 Work on session 4, Arrays started.
Shantanu <shantanu@fossee.in>
parents: 40
diff changeset
   272
    In []: c[1][2]
46a3575919f5 Work on session 4, Arrays started.
Shantanu <shantanu@fossee.in>
parents: 40
diff changeset
   273
    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
   274
    lists. Also, note that counting again starts from 0. 
46a3575919f5 Work on session 4, Arrays started.
Shantanu <shantanu@fossee.in>
parents: 40
diff changeset
   275
    
46a3575919f5 Work on session 4, Arrays started.
Shantanu <shantanu@fossee.in>
parents: 40
diff changeset
   276
    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
   277
    In []: c[1, 2]
46a3575919f5 Work on session 4, Arrays started.
Shantanu <shantanu@fossee.in>
parents: 40
diff changeset
   278
    
46a3575919f5 Work on session 4, Arrays started.
Shantanu <shantanu@fossee.in>
parents: 40
diff changeset
   279
    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
   280
    In []: c[1, 2] = -23
46a3575919f5 Work on session 4, Arrays started.
Shantanu <shantanu@fossee.in>
parents: 40
diff changeset
   281
46a3575919f5 Work on session 4, Arrays started.
Shantanu <shantanu@fossee.in>
parents: 40
diff changeset
   282
    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
   283
    with accessing rows. 
46a3575919f5 Work on session 4, Arrays started.
Shantanu <shantanu@fossee.in>
parents: 40
diff changeset
   284
    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
   285
46a3575919f5 Work on session 4, Arrays started.
Shantanu <shantanu@fossee.in>
parents: 40
diff changeset
   286
    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
   287
    to access a single element. 
46a3575919f5 Work on session 4, Arrays started.
Shantanu <shantanu@fossee.in>
parents: 40
diff changeset
   288
    In []: c[:,1], gives us the first column. 
46a3575919f5 Work on session 4, Arrays started.
Shantanu <shantanu@fossee.in>
parents: 40
diff changeset
   289
    
46a3575919f5 Work on session 4, Arrays started.
Shantanu <shantanu@fossee.in>
parents: 40
diff changeset
   290
    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
   291
    dimension from the array.  
46a3575919f5 Work on session 4, Arrays started.
Shantanu <shantanu@fossee.in>
parents: 40
diff changeset
   292
46a3575919f5 Work on session 4, Arrays started.
Shantanu <shantanu@fossee.in>
parents: 40
diff changeset
   293
    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
   294
    the array. 
46a3575919f5 Work on session 4, Arrays started.
Shantanu <shantanu@fossee.in>
parents: 40
diff changeset
   295
    In []: c[1,:]
46a3575919f5 Work on session 4, Arrays started.
Shantanu <shantanu@fossee.in>
parents: 40
diff changeset
   296
    
46a3575919f5 Work on session 4, Arrays started.
Shantanu <shantanu@fossee.in>
parents: 40
diff changeset
   297
    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
   298
    similar to the way we do with lists. 
46a3575919f5 Work on session 4, Arrays started.
Shantanu <shantanu@fossee.in>
parents: 40
diff changeset
   299
    In []: c[1,1:3]
46a3575919f5 Work on session 4, Arrays started.
Shantanu <shantanu@fossee.in>
parents: 40
diff changeset
   300
    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
   301
    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
   302
    slicing a portion of the array. 
46a3575919f5 Work on session 4, Arrays started.
Shantanu <shantanu@fossee.in>
parents: 40
diff changeset
   303
46a3575919f5 Work on session 4, Arrays started.
Shantanu <shantanu@fossee.in>
parents: 40
diff changeset
   304
    In []: c[1:3,1]
46a3575919f5 Work on session 4, Arrays started.
Shantanu <shantanu@fossee.in>
parents: 40
diff changeset
   305
    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
   306
46a3575919f5 Work on session 4, Arrays started.
Shantanu <shantanu@fossee.in>
parents: 40
diff changeset
   307
    In []: c[1:3,1:3]
46a3575919f5 Work on session 4, Arrays started.
Shantanu <shantanu@fossee.in>
parents: 40
diff changeset
   308
    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
   309
    columns. 
46a3575919f5 Work on session 4, Arrays started.
Shantanu <shantanu@fossee.in>
parents: 40
diff changeset
   310
46a3575919f5 Work on session 4, Arrays started.
Shantanu <shantanu@fossee.in>
parents: 40
diff changeset
   311
    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
   312
    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
   313
    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
   314
    to be until the end. 
46a3575919f5 Work on session 4, Arrays started.
Shantanu <shantanu@fossee.in>
parents: 40
diff changeset
   315
46a3575919f5 Work on session 4, Arrays started.
Shantanu <shantanu@fossee.in>
parents: 40
diff changeset
   316
    In []: c[1:, 1:]
46a3575919f5 Work on session 4, Arrays started.
Shantanu <shantanu@fossee.in>
parents: 40
diff changeset
   317
    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
   318
    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
   319
    explicitly. 
46a3575919f5 Work on session 4, Arrays started.
Shantanu <shantanu@fossee.in>
parents: 40
diff changeset
   320
46a3575919f5 Work on session 4, Arrays started.
Shantanu <shantanu@fossee.in>
parents: 40
diff changeset
   321
    In []: c[:2, :2]
46a3575919f5 Work on session 4, Arrays started.
Shantanu <shantanu@fossee.in>
parents: 40
diff changeset
   322
    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
   323
46a3575919f5 Work on session 4, Arrays started.
Shantanu <shantanu@fossee.in>
parents: 40
diff changeset
   324
    --- 
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
    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
   327
    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
   328
    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
   329
    termed as Striding. 
46a3575919f5 Work on session 4, Arrays started.
Shantanu <shantanu@fossee.in>
parents: 40
diff changeset
   330
46a3575919f5 Work on session 4, Arrays started.
Shantanu <shantanu@fossee.in>
parents: 40
diff changeset
   331
    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
   332
    In []: c[::2,:]
46a3575919f5 Work on session 4, Arrays started.
Shantanu <shantanu@fossee.in>
parents: 40
diff changeset
   333
46a3575919f5 Work on session 4, Arrays started.
Shantanu <shantanu@fossee.in>
parents: 40
diff changeset
   334
    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
   335
    say 
46a3575919f5 Work on session 4, Arrays started.
Shantanu <shantanu@fossee.in>
parents: 40
diff changeset
   336
    In []: c[1::2,:]
46a3575919f5 Work on session 4, Arrays started.
Shantanu <shantanu@fossee.in>
parents: 40
diff changeset
   337
46a3575919f5 Work on session 4, Arrays started.
Shantanu <shantanu@fossee.in>
parents: 40
diff changeset
   338
46a3575919f5 Work on session 4, Arrays started.
Shantanu <shantanu@fossee.in>
parents: 40
diff changeset
   339
    In []: c[:,::2]
46a3575919f5 Work on session 4, Arrays started.
Shantanu <shantanu@fossee.in>
parents: 40
diff changeset
   340
    In []: c[::2,::2]
46a3575919f5 Work on session 4, Arrays started.
Shantanu <shantanu@fossee.in>
parents: 40
diff changeset
   341
46a3575919f5 Work on session 4, Arrays started.
Shantanu <shantanu@fossee.in>
parents: 40
diff changeset
   342
    ---
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
    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
   345
    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
   346
46a3575919f5 Work on session 4, Arrays started.
Shantanu <shantanu@fossee.in>
parents: 40
diff changeset
   347
    Thank you. 
46a3575919f5 Work on session 4, Arrays started.
Shantanu <shantanu@fossee.in>
parents: 40
diff changeset
   348
40
6e3526275a00 Adding arrays.txt file , script for arrays tutorial , session 4
amit@thunder
parents:
diff changeset
   349
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
   350
6e3526275a00 Adding arrays.txt file , script for arrays tutorial , session 4
amit@thunder
parents:
diff changeset
   351
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
   352
6e3526275a00 Adding arrays.txt file , script for arrays tutorial , session 4
amit@thunder
parents:
diff changeset
   353
6e3526275a00 Adding arrays.txt file , script for arrays tutorial , session 4
amit@thunder
parents:
diff changeset
   354
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
   355
54
46a3575919f5 Work on session 4, Arrays started.
Shantanu <shantanu@fossee.in>
parents: 40
diff changeset
   356
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
   357
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
   358
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
   359
69
5452f6b11fe6 Minor edits.
Santosh G. Vattam <vattam.santosh@gmail.com>
parents: 67
diff changeset
   360
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
   361
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
   362
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
   363
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
   364
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
   365
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
   366
command.  type b= ones_like in parenthesis a .