Indexing and slicing
Indexing and slicing allow you to access specific elements of an array - it is important to understand how this works for arrays of varying dimensions. Important to remember is that python is zero-indexed i.e. the first position in a list, an array or any other data structure has an index of zero.
1-dimensional indexing
Let’s start by making a simple array of random numbers:
rand=numpy.random.random(7)
The best way to think about slicing an array is to imagine a syntax structure of array[start_slice:end_slice:step]
(where not all of the variables (start_slice, end_slice, step) need to be set).
To get the first value of the array by index, type:
rand[0]
To get the first 3 values of the array rand
by index, type:
rand[0:3]
To take a slice, accessing all values:
rand[:]
To take a slice and get all but the last value:
rand[:-1]
To reverse the array:
rand[::-1]
To get every second value:
rand[::2]
All of the above can be assigned to a variable - it is worth taking notice the type of object that is created according to what is returned by the index/slice:
val=rand[1]
val.dtype
returns:
dtype('float64')
skip=rand[::2]
type(skip)
returns:
numpy.ndarray
Try using numpy.dtype(skip)
on this second example - why don’t you think it works? If you’re not sure, check the function documentation.
2-dimensional+ indexing
Let’s start by making a 2-dimensional random array:
rand2=numpy.random.random((5,3))
Indexing in multiple dimensions is the same as for 1-dimension, except that your slice statements are specified per dimension. Accessing the dimensions of an array can be visualised as:
1-dimension: array[1st_dimension]
2-dimensions: array[1st_dimension,2nd_dimension]
3-dimensions: array[1st_dimension,2nd_dimension,3rd_dimension]
To access all elements of the 1st dimension (you can imagine this as the top row):
rand2[0,:]
To access all elements of the 1st 2 dimensions (you can imagine this as the top 2 rows):
rand2[0:2,:]
To access the first element of each dimension (you can imagine this as the 1st column):
rand2[:,0]
To access the first 2 elements of each dimension (you can imagine this as the 2 columns):
rand2[:,0:2]