arrays.txt
author Shantanu <shantanu@fossee.in>
Wed, 14 Apr 2010 15:03:58 +0530
changeset 55 1fe734b20950
parent 54 46a3575919f5
child 56 86c862b3dbef
permissions -rw-r--r--
Added slicing and striding part.
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
54
46a3575919f5 Work on session 4, Arrays started.
Shantanu <shantanu@fossee.in>
parents: 40
diff changeset
     1
Hello and welcome to the tutorial on Matrices.
46a3575919f5 Work on session 4, Arrays started.
Shantanu <shantanu@fossee.in>
parents: 40
diff changeset
     2
All matrices operations are done using arrays.
46a3575919f5 Work on session 4, Arrays started.
Shantanu <shantanu@fossee.in>
parents: 40
diff changeset
     3
We have already seen in previous session that how arrays are better suited for particular mathematical operations. In this session we are going to cover more details on Arrays, how to create/initialize them, how to manipulate and use them for solving given problem.
46a3575919f5 Work on session 4, Arrays started.
Shantanu <shantanu@fossee.in>
parents: 40
diff changeset
     4
46a3575919f5 Work on session 4, Arrays started.
Shantanu <shantanu@fossee.in>
parents: 40
diff changeset
     5
First thing first, we start with creating a normal array by:
46a3575919f5 Work on session 4, Arrays started.
Shantanu <shantanu@fossee.in>
parents: 40
diff changeset
     6
a (equal to)= array([5, 8, 10, 13])
46a3575919f5 Work on session 4, Arrays started.
Shantanu <shantanu@fossee.in>
parents: 40
diff changeset
     7
46a3575919f5 Work on session 4, Arrays started.
Shantanu <shantanu@fossee.in>
parents: 40
diff changeset
     8
and we have a as array. we can cross the content by
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
46a3575919f5 Work on session 4, Arrays started.
Shantanu <shantanu@fossee.in>
parents: 40
diff changeset
    11
Here a is single dimension array, that is it has only one row. We can create multi-dimensional arrays by
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
46a3575919f5 Work on session 4, Arrays started.
Shantanu <shantanu@fossee.in>
parents: 40
diff changeset
    20
some other handy array initialization methods are also available to make life easier.
46a3575919f5 Work on session 4, Arrays started.
Shantanu <shantanu@fossee.in>
parents: 40
diff changeset
    21
say we want to create a array of size 3x4 with all values initialized to be 1, we can use
46a3575919f5 Work on session 4, Arrays started.
Shantanu <shantanu@fossee.in>
parents: 40
diff changeset
    22
b = ones((3, 4))
46a3575919f5 Work on session 4, Arrays started.
Shantanu <shantanu@fossee.in>
parents: 40
diff changeset
    23
check value by
46a3575919f5 Work on session 4, Arrays started.
Shantanu <shantanu@fossee.in>
parents: 40
diff changeset
    24
b
46a3575919f5 Work on session 4, Arrays started.
Shantanu <shantanu@fossee.in>
parents: 40
diff changeset
    25
similarly, we already have a array, and we want to create one more array with same shape and initial values to be one, for that we will use
46a3575919f5 Work on session 4, Arrays started.
Shantanu <shantanu@fossee.in>
parents: 40
diff changeset
    26
d = ones_like(c)
46a3575919f5 Work on session 4, Arrays started.
Shantanu <shantanu@fossee.in>
parents: 40
diff changeset
    27
and d will be 3x3 array with all values 1
46a3575919f5 Work on session 4, Arrays started.
Shantanu <shantanu@fossee.in>
parents: 40
diff changeset
    28
46a3575919f5 Work on session 4, Arrays started.
Shantanu <shantanu@fossee.in>
parents: 40
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(array) of given order
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
55
1fe734b20950 Added slicing and striding part.
Shantanu <shantanu@fossee.in>
parents: 54
diff changeset
    35
----------------
1fe734b20950 Added slicing and striding part.
Shantanu <shantanu@fossee.in>
parents: 54
diff changeset
    36
Now that we have covered creation of arrays, we will see how to access and change values of particular elements. 
1fe734b20950 Added slicing and striding part.
Shantanu <shantanu@fossee.in>
parents: 54
diff changeset
    37
We created one 3x3 matrix earlier, 
1fe734b20950 Added slicing and striding part.
Shantanu <shantanu@fossee.in>
parents: 54
diff changeset
    38
c
1fe734b20950 Added slicing and striding part.
Shantanu <shantanu@fossee.in>
parents: 54
diff changeset
    39
1fe734b20950 Added slicing and striding part.
Shantanu <shantanu@fossee.in>
parents: 54
diff changeset
    40
to access the element 23 we type
1fe734b20950 Added slicing and striding part.
Shantanu <shantanu@fossee.in>
parents: 54
diff changeset
    41
c[1][2]
1fe734b20950 Added slicing and striding part.
Shantanu <shantanu@fossee.in>
parents: 54
diff changeset
    42
1fe734b20950 Added slicing and striding part.
Shantanu <shantanu@fossee.in>
parents: 54
diff changeset
    43
It is second row third column of c. Note that index values of arrays also start from 0.
1fe734b20950 Added slicing and striding part.
Shantanu <shantanu@fossee.in>
parents: 54
diff changeset
    44
Alternative and popular way of doing this is
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
1fe734b20950 Added slicing and striding part.
Shantanu <shantanu@fossee.in>
parents: 54
diff changeset
    47
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
    48
1fe734b20950 Added slicing and striding part.
Shantanu <shantanu@fossee.in>
parents: 54
diff changeset
    49
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
    50
c[1]
1fe734b20950 Added slicing and striding part.
Shantanu <shantanu@fossee.in>
parents: 54
diff changeset
    51
will give us the entire second row.
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
The way by which we access one element of array, we use that itself to assign new value
1fe734b20950 Added slicing and striding part.
Shantanu <shantanu@fossee.in>
parents: 54
diff changeset
    54
c[1, 1] = -22
1fe734b20950 Added slicing and striding part.
Shantanu <shantanu@fossee.in>
parents: 54
diff changeset
    55
c
1fe734b20950 Added slicing and striding part.
Shantanu <shantanu@fossee.in>
parents: 54
diff changeset
    56
1fe734b20950 Added slicing and striding part.
Shantanu <shantanu@fossee.in>
parents: 54
diff changeset
    57
and same thing can be used for entire row
1fe734b20950 Added slicing and striding part.
Shantanu <shantanu@fossee.in>
parents: 54
diff changeset
    58
c[1] = 0
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
as we can see, second row all elements are now 0
1fe734b20950 Added slicing and striding part.
Shantanu <shantanu@fossee.in>
parents: 54
diff changeset
    61
1fe734b20950 Added slicing and striding part.
Shantanu <shantanu@fossee.in>
parents: 54
diff changeset
    62
Accessing a row is straight forward we skip column part
1fe734b20950 Added slicing and striding part.
Shantanu <shantanu@fossee.in>
parents: 54
diff changeset
    63
but to access whole column we have to use
1fe734b20950 Added slicing and striding part.
Shantanu <shantanu@fossee.in>
parents: 54
diff changeset
    64
c[:,2]
1fe734b20950 Added slicing and striding part.
Shantanu <shantanu@fossee.in>
parents: 54
diff changeset
    65
will return third column.
1fe734b20950 Added slicing and striding part.
Shantanu <shantanu@fossee.in>
parents: 54
diff changeset
    66
here the ':' part mentioned for row value symbolises entire row.
1fe734b20950 Added slicing and striding part.
Shantanu <shantanu@fossee.in>
parents: 54
diff changeset
    67
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
    68
1fe734b20950 Added slicing and striding part.
Shantanu <shantanu@fossee.in>
parents: 54
diff changeset
    69
':' 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
    70
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
    71
c[0:2,:]
1fe734b20950 Added slicing and striding part.
Shantanu <shantanu@fossee.in>
parents: 54
diff changeset
    72
will result in rows starting from first(0) till second and all columns. Note here that 'end' in our case, '2' would not be included in resulting array.
1fe734b20950 Added slicing and striding part.
Shantanu <shantanu@fossee.in>
parents: 54
diff changeset
    73
1fe734b20950 Added slicing and striding part.
Shantanu <shantanu@fossee.in>
parents: 54
diff changeset
    74
c[1:3,:] 
1fe734b20950 Added slicing and striding part.
Shantanu <shantanu@fossee.in>
parents: 54
diff changeset
    75
gives second and third row.
1fe734b20950 Added slicing and striding part.
Shantanu <shantanu@fossee.in>
parents: 54
diff changeset
    76
1fe734b20950 Added slicing and striding part.
Shantanu <shantanu@fossee.in>
parents: 54
diff changeset
    77
similarly we can try this on columns also:
1fe734b20950 Added slicing and striding part.
Shantanu <shantanu@fossee.in>
parents: 54
diff changeset
    78
c[:, 0:2] gives us first two column
1fe734b20950 Added slicing and striding part.
Shantanu <shantanu@fossee.in>
parents: 54
diff changeset
    79
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
    80
1fe734b20950 Added slicing and striding part.
Shantanu <shantanu@fossee.in>
parents: 54
diff changeset
    81
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
    82
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
    83
1fe734b20950 Added slicing and striding part.
Shantanu <shantanu@fossee.in>
parents: 54
diff changeset
    84
so
1fe734b20950 Added slicing and striding part.
Shantanu <shantanu@fossee.in>
parents: 54
diff changeset
    85
c[:, :2]
1fe734b20950 Added slicing and striding part.
Shantanu <shantanu@fossee.in>
parents: 54
diff changeset
    86
will also give us first two columns
1fe734b20950 Added slicing and striding part.
Shantanu <shantanu@fossee.in>
parents: 54
diff changeset
    87
and c[:, 1:] will return last columns.
1fe734b20950 Added slicing and striding part.
Shantanu <shantanu@fossee.in>
parents: 54
diff changeset
    88
1fe734b20950 Added slicing and striding part.
Shantanu <shantanu@fossee.in>
parents: 54
diff changeset
    89
c[1:, :2]
1fe734b20950 Added slicing and striding part.
Shantanu <shantanu@fossee.in>
parents: 54
diff changeset
    90
returns first two columns of last two rows
1fe734b20950 Added slicing and striding part.
Shantanu <shantanu@fossee.in>
parents: 54
diff changeset
    91
1fe734b20950 Added slicing and striding part.
Shantanu <shantanu@fossee.in>
parents: 54
diff changeset
    92
Now we will look into one more powerful feature of arrays: 'striding'.
1fe734b20950 Added slicing and striding part.
Shantanu <shantanu@fossee.in>
parents: 54
diff changeset
    93
Striding allows us to jump or skip rows or columns by certain interval. We can specify the step size.
1fe734b20950 Added slicing and striding part.
Shantanu <shantanu@fossee.in>
parents: 54
diff changeset
    94
c[:,:] will give us entire array
1fe734b20950 Added slicing and striding part.
Shantanu <shantanu@fossee.in>
parents: 54
diff changeset
    95
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
    96
c[:, ::2]
1fe734b20950 Added slicing and striding part.
Shantanu <shantanu@fossee.in>
parents: 54
diff changeset
    97
will give us first and third column. Since step size is two, it start with first column(blank before : means 0) and then we jump one column and then third(blank after : means end)
1fe734b20950 Added slicing and striding part.
Shantanu <shantanu@fossee.in>
parents: 54
diff changeset
    98
similarly 
1fe734b20950 Added slicing and striding part.
Shantanu <shantanu@fossee.in>
parents: 54
diff changeset
    99
c[::2,:] returns 2x3 array with first and third row
1fe734b20950 Added slicing and striding part.
Shantanu <shantanu@fossee.in>
parents: 54
diff changeset
   100
1fe734b20950 Added slicing and striding part.
Shantanu <shantanu@fossee.in>
parents: 54
diff changeset
   101
and c[::2, ::2] will give us 2x2 array with first and third row and column 
1fe734b20950 Added slicing and striding part.
Shantanu <shantanu@fossee.in>
parents: 54
diff changeset
   102
1fe734b20950 Added slicing and striding part.
Shantanu <shantanu@fossee.in>
parents: 54
diff changeset
   103
With 
1fe734b20950 Added slicing and striding part.
Shantanu <shantanu@fossee.in>
parents: 54
diff changeset
   104
1fe734b20950 Added slicing and striding part.
Shantanu <shantanu@fossee.in>
parents: 54
diff changeset
   105
----------------
54
46a3575919f5 Work on session 4, Arrays started.
Shantanu <shantanu@fossee.in>
parents: 40
diff changeset
   106
We have seen 
46a3575919f5 Work on session 4, Arrays started.
Shantanu <shantanu@fossee.in>
parents: 40
diff changeset
   107
    Welcome to the Tutorial on arrays. 
46a3575919f5 Work on session 4, Arrays started.
Shantanu <shantanu@fossee.in>
parents: 40
diff changeset
   108
46a3575919f5 Work on session 4, Arrays started.
Shantanu <shantanu@fossee.in>
parents: 40
diff changeset
   109
    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
   110
    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
   111
    accessing elements and changing them. 
46a3575919f5 Work on session 4, Arrays started.
Shantanu <shantanu@fossee.in>
parents: 40
diff changeset
   112
46a3575919f5 Work on session 4, Arrays started.
Shantanu <shantanu@fossee.in>
parents: 40
diff changeset
   113
    ---
46a3575919f5 Work on session 4, Arrays started.
Shantanu <shantanu@fossee.in>
parents: 40
diff changeset
   114
46a3575919f5 Work on session 4, Arrays started.
Shantanu <shantanu@fossee.in>
parents: 40
diff changeset
   115
    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
   116
    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
   117
46a3575919f5 Work on session 4, Arrays started.
Shantanu <shantanu@fossee.in>
parents: 40
diff changeset
   118
    In []: 
46a3575919f5 Work on session 4, Arrays started.
Shantanu <shantanu@fossee.in>
parents: 40
diff changeset
   119
46a3575919f5 Work on session 4, Arrays started.
Shantanu <shantanu@fossee.in>
parents: 40
diff changeset
   120
    Type /a/, to see what it is. 
46a3575919f5 Work on session 4, Arrays started.
Shantanu <shantanu@fossee.in>
parents: 40
diff changeset
   121
46a3575919f5 Work on session 4, Arrays started.
Shantanu <shantanu@fossee.in>
parents: 40
diff changeset
   122
    In []: a
46a3575919f5 Work on session 4, Arrays started.
Shantanu <shantanu@fossee.in>
parents: 40
diff changeset
   123
    
46a3575919f5 Work on session 4, Arrays started.
Shantanu <shantanu@fossee.in>
parents: 40
diff changeset
   124
    We enter a multi-dimensional array this way -
46a3575919f5 Work on session 4, Arrays started.
Shantanu <shantanu@fossee.in>
parents: 40
diff changeset
   125
    
46a3575919f5 Work on session 4, Arrays started.
Shantanu <shantanu@fossee.in>
parents: 40
diff changeset
   126
    In []: c = array([[11,12,13],
46a3575919f5 Work on session 4, Arrays started.
Shantanu <shantanu@fossee.in>
parents: 40
diff changeset
   127
                     [21,22,23],
46a3575919f5 Work on session 4, Arrays started.
Shantanu <shantanu@fossee.in>
parents: 40
diff changeset
   128
                      [31,32,33]])
46a3575919f5 Work on session 4, Arrays started.
Shantanu <shantanu@fossee.in>
parents: 40
diff changeset
   129
46a3575919f5 Work on session 4, Arrays started.
Shantanu <shantanu@fossee.in>
parents: 40
diff changeset
   130
    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
   131
		      
46a3575919f5 Work on session 4, Arrays started.
Shantanu <shantanu@fossee.in>
parents: 40
diff changeset
   132
    In []: c
46a3575919f5 Work on session 4, Arrays started.
Shantanu <shantanu@fossee.in>
parents: 40
diff changeset
   133
46a3575919f5 Work on session 4, Arrays started.
Shantanu <shantanu@fossee.in>
parents: 40
diff changeset
   134
    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
   135
    In []: c.shape 
46a3575919f5 Work on session 4, Arrays started.
Shantanu <shantanu@fossee.in>
parents: 40
diff changeset
   136
46a3575919f5 Work on session 4, Arrays started.
Shantanu <shantanu@fossee.in>
parents: 40
diff changeset
   137
    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
   138
    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
   139
    arrays. 
46a3575919f5 Work on session 4, Arrays started.
Shantanu <shantanu@fossee.in>
parents: 40
diff changeset
   140
46a3575919f5 Work on session 4, Arrays started.
Shantanu <shantanu@fossee.in>
parents: 40
diff changeset
   141
    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
   142
    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
   143
    float arguments. 
46a3575919f5 Work on session 4, Arrays started.
Shantanu <shantanu@fossee.in>
parents: 40
diff changeset
   144
    
46a3575919f5 Work on session 4, Arrays started.
Shantanu <shantanu@fossee.in>
parents: 40
diff changeset
   145
    In []: a = arange(10)
46a3575919f5 Work on session 4, Arrays started.
Shantanu <shantanu@fossee.in>
parents: 40
diff changeset
   146
    
46a3575919f5 Work on session 4, Arrays started.
Shantanu <shantanu@fossee.in>
parents: 40
diff changeset
   147
    In []: a
46a3575919f5 Work on session 4, Arrays started.
Shantanu <shantanu@fossee.in>
parents: 40
diff changeset
   148
    This is the array we just created. 
46a3575919f5 Work on session 4, Arrays started.
Shantanu <shantanu@fossee.in>
parents: 40
diff changeset
   149
    
46a3575919f5 Work on session 4, Arrays started.
Shantanu <shantanu@fossee.in>
parents: 40
diff changeset
   150
    In []: a.shape
46a3575919f5 Work on session 4, Arrays started.
Shantanu <shantanu@fossee.in>
parents: 40
diff changeset
   151
    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
   152
46a3575919f5 Work on session 4, Arrays started.
Shantanu <shantanu@fossee.in>
parents: 40
diff changeset
   153
    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
   154
    In []: a.shape = 2,5
46a3575919f5 Work on session 4, Arrays started.
Shantanu <shantanu@fossee.in>
parents: 40
diff changeset
   155
    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
   156
46a3575919f5 Work on session 4, Arrays started.
Shantanu <shantanu@fossee.in>
parents: 40
diff changeset
   157
    We type a, to see what it looks like
46a3575919f5 Work on session 4, Arrays started.
Shantanu <shantanu@fossee.in>
parents: 40
diff changeset
   158
    In []: a
46a3575919f5 Work on session 4, Arrays started.
Shantanu <shantanu@fossee.in>
parents: 40
diff changeset
   159
46a3575919f5 Work on session 4, Arrays started.
Shantanu <shantanu@fossee.in>
parents: 40
diff changeset
   160
    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
   161
    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
   162
    
46a3575919f5 Work on session 4, Arrays started.
Shantanu <shantanu@fossee.in>
parents: 40
diff changeset
   163
    In []: 
46a3575919f5 Work on session 4, Arrays started.
Shantanu <shantanu@fossee.in>
parents: 40
diff changeset
   164
46a3575919f5 Work on session 4, Arrays started.
Shantanu <shantanu@fossee.in>
parents: 40
diff changeset
   165
    Look at b, by printing it out. 
46a3575919f5 Work on session 4, Arrays started.
Shantanu <shantanu@fossee.in>
parents: 40
diff changeset
   166
    In []: b 
46a3575919f5 Work on session 4, Arrays started.
Shantanu <shantanu@fossee.in>
parents: 40
diff changeset
   167
46a3575919f5 Work on session 4, Arrays started.
Shantanu <shantanu@fossee.in>
parents: 40
diff changeset
   168
    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
   169
    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
   170
    command.  
46a3575919f5 Work on session 4, Arrays started.
Shantanu <shantanu@fossee.in>
parents: 40
diff changeset
   171
    In []: b = ones_like(a)
46a3575919f5 Work on session 4, Arrays started.
Shantanu <shantanu@fossee.in>
parents: 40
diff changeset
   172
46a3575919f5 Work on session 4, Arrays started.
Shantanu <shantanu@fossee.in>
parents: 40
diff changeset
   173
    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
   174
    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
   175
    with no initialization done.)
46a3575919f5 Work on session 4, Arrays started.
Shantanu <shantanu@fossee.in>
parents: 40
diff changeset
   176
46a3575919f5 Work on session 4, Arrays started.
Shantanu <shantanu@fossee.in>
parents: 40
diff changeset
   177
    In []: b = zeros((3, 4))
46a3575919f5 Work on session 4, Arrays started.
Shantanu <shantanu@fossee.in>
parents: 40
diff changeset
   178
    In []: b = zeros_like(a)
46a3575919f5 Work on session 4, Arrays started.
Shantanu <shantanu@fossee.in>
parents: 40
diff changeset
   179
46a3575919f5 Work on session 4, Arrays started.
Shantanu <shantanu@fossee.in>
parents: 40
diff changeset
   180
    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
   181
    ones on the main diagonal. 
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
    In []: identity(3)
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
    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
   186
    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
   187
    more info. 
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
    ---
46a3575919f5 Work on session 4, Arrays started.
Shantanu <shantanu@fossee.in>
parents: 40
diff changeset
   190
    
46a3575919f5 Work on session 4, Arrays started.
Shantanu <shantanu@fossee.in>
parents: 40
diff changeset
   191
    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
   192
    accessing elements and changing them. 
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
    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
   195
46a3575919f5 Work on session 4, Arrays started.
Shantanu <shantanu@fossee.in>
parents: 40
diff changeset
   196
    In []: c 
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
    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
   199
46a3575919f5 Work on session 4, Arrays started.
Shantanu <shantanu@fossee.in>
parents: 40
diff changeset
   200
    In []: c[1][2]
46a3575919f5 Work on session 4, Arrays started.
Shantanu <shantanu@fossee.in>
parents: 40
diff changeset
   201
    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
   202
    lists. Also, note that counting again starts from 0. 
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
    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
   205
    In []: c[1, 2]
46a3575919f5 Work on session 4, Arrays started.
Shantanu <shantanu@fossee.in>
parents: 40
diff changeset
   206
    
46a3575919f5 Work on session 4, Arrays started.
Shantanu <shantanu@fossee.in>
parents: 40
diff changeset
   207
    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
   208
    In []: c[1, 2] = -23
46a3575919f5 Work on session 4, Arrays started.
Shantanu <shantanu@fossee.in>
parents: 40
diff changeset
   209
46a3575919f5 Work on session 4, Arrays started.
Shantanu <shantanu@fossee.in>
parents: 40
diff changeset
   210
    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
   211
    with accessing rows. 
46a3575919f5 Work on session 4, Arrays started.
Shantanu <shantanu@fossee.in>
parents: 40
diff changeset
   212
    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
   213
46a3575919f5 Work on session 4, Arrays started.
Shantanu <shantanu@fossee.in>
parents: 40
diff changeset
   214
    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
   215
    to access a single element. 
46a3575919f5 Work on session 4, Arrays started.
Shantanu <shantanu@fossee.in>
parents: 40
diff changeset
   216
    In []: c[:,1], gives us the first column. 
46a3575919f5 Work on session 4, Arrays started.
Shantanu <shantanu@fossee.in>
parents: 40
diff changeset
   217
    
46a3575919f5 Work on session 4, Arrays started.
Shantanu <shantanu@fossee.in>
parents: 40
diff changeset
   218
    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
   219
    dimension from the array.  
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
    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
   222
    the array. 
46a3575919f5 Work on session 4, Arrays started.
Shantanu <shantanu@fossee.in>
parents: 40
diff changeset
   223
    In []: c[1,:]
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
    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
   226
    similar to the way we do with lists. 
46a3575919f5 Work on session 4, Arrays started.
Shantanu <shantanu@fossee.in>
parents: 40
diff changeset
   227
    In []: c[1,1:3]
46a3575919f5 Work on session 4, Arrays started.
Shantanu <shantanu@fossee.in>
parents: 40
diff changeset
   228
    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
   229
    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
   230
    slicing a portion of the array. 
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
    In []: c[1:3,1]
46a3575919f5 Work on session 4, Arrays started.
Shantanu <shantanu@fossee.in>
parents: 40
diff changeset
   233
    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
   234
46a3575919f5 Work on session 4, Arrays started.
Shantanu <shantanu@fossee.in>
parents: 40
diff changeset
   235
    In []: c[1:3,1:3]
46a3575919f5 Work on session 4, Arrays started.
Shantanu <shantanu@fossee.in>
parents: 40
diff changeset
   236
    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
   237
    columns. 
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
    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
   240
    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
   241
    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
   242
    to be until the end. 
46a3575919f5 Work on session 4, Arrays started.
Shantanu <shantanu@fossee.in>
parents: 40
diff changeset
   243
46a3575919f5 Work on session 4, Arrays started.
Shantanu <shantanu@fossee.in>
parents: 40
diff changeset
   244
    In []: c[1:, 1:]
46a3575919f5 Work on session 4, Arrays started.
Shantanu <shantanu@fossee.in>
parents: 40
diff changeset
   245
    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
   246
    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
   247
    explicitly. 
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 []: c[:2, :2]
46a3575919f5 Work on session 4, Arrays started.
Shantanu <shantanu@fossee.in>
parents: 40
diff changeset
   250
    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
   251
46a3575919f5 Work on session 4, Arrays started.
Shantanu <shantanu@fossee.in>
parents: 40
diff changeset
   252
    --- 
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
    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
   255
    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
   256
    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
   257
    termed as Striding. 
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 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
   260
    In []: c[::2,:]
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
    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
   263
    say 
46a3575919f5 Work on session 4, Arrays started.
Shantanu <shantanu@fossee.in>
parents: 40
diff changeset
   264
    In []: c[1::2,:]
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
46a3575919f5 Work on session 4, Arrays started.
Shantanu <shantanu@fossee.in>
parents: 40
diff changeset
   267
    In []: c[:,::2]
46a3575919f5 Work on session 4, Arrays started.
Shantanu <shantanu@fossee.in>
parents: 40
diff changeset
   268
    In []: c[::2,::2]
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
    ---
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
    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
   273
    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
   274
46a3575919f5 Work on session 4, Arrays started.
Shantanu <shantanu@fossee.in>
parents: 40
diff changeset
   275
    Thank you. 
46a3575919f5 Work on session 4, Arrays started.
Shantanu <shantanu@fossee.in>
parents: 40
diff changeset
   276
40
6e3526275a00 Adding arrays.txt file , script for arrays tutorial , session 4
amit@thunder
parents:
diff changeset
   277
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
   278
6e3526275a00 Adding arrays.txt file , script for arrays tutorial , session 4
amit@thunder
parents:
diff changeset
   279
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
   280
6e3526275a00 Adding arrays.txt file , script for arrays tutorial , session 4
amit@thunder
parents:
diff changeset
   281
6e3526275a00 Adding arrays.txt file , script for arrays tutorial , session 4
amit@thunder
parents:
diff changeset
   282
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
   283
54
46a3575919f5 Work on session 4, Arrays started.
Shantanu <shantanu@fossee.in>
parents: 40
diff changeset
   284
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 .
40
6e3526275a00 Adding arrays.txt file , script for arrays tutorial , session 4
amit@thunder
parents:
diff changeset
   285
Now we will try to create a multi-dimensional array type in your ipython terminal
6e3526275a00 Adding arrays.txt file , script for arrays tutorial , session 4
amit@thunder
parents:
diff changeset
   286
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 will do c.shape . We can see that c is a 3 by 3 matrix .
6e3526275a00 Adding arrays.txt file , script for arrays tutorial , session 4
amit@thunder
parents:
diff changeset
   287
6e3526275a00 Adding arrays.txt file , script for arrays tutorial , session 4
amit@thunder
parents:
diff changeset
   288
There are other special methods of creating arrays as well we will now look at them .
6e3526275a00 Adding arrays.txt file , script for arrays tutorial , session 4
amit@thunder
parents:
diff changeset
   289
The first one is the command arange which is similar to range except that it returns an array.
6e3526275a00 Adding arrays.txt file , script for arrays tutorial , session 4
amit@thunder
parents:
diff changeset
   290
We will type on our Ipython interpreter a = arange(10). We will see what a is now . Type a . As we can see This returns us an array of one dimension and has 10 elements .  
6e3526275a00 Adding arrays.txt file , script for arrays tutorial , session 4
amit@thunder
parents:
diff changeset
   291
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
   292
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
   293
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
   294
command.  type b= ones_like in parenthesis a .