5.19 indexing and selection of array elements


In [1]:
import numpy as np

In [2]:
arr = np.arange(0,11)

In [3]:
arr


Out[3]:
array([ 0,  1,  2,  3,  4,  5,  6,  7,  8,  9, 10])

In [4]:
arr[8]


Out[4]:
8

In [5]:
arr[1:5]


Out[5]:
array([1, 2, 3, 4])

In [6]:
arr[:6]


Out[6]:
array([0, 1, 2, 3, 4, 5])

Broadcasting, views and copies


In [10]:
arr[0:5] = 100

In [8]:
arr


Out[8]:
array([100, 100, 100, 100, 100,   5,   6,   7,   8,   9,  10])

In [9]:
arr = np.arange(0,11)

In [11]:
slice_of_arr = arr[:6]

In [12]:
slice_of_arr[:] = 99

In [16]:
arr # it's linked! slice_of_arr is just a view of the original array.


Out[16]:
array([99, 99, 99, 99, 99, 99,  6,  7,  8,  9, 10])

In [21]:
arr_copy = arr.copy() # this actually copies to a new array instead of linking

In [18]:
arr_copy[:] = 100

In [19]:
arr_copy


Out[19]:
array([100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100])

In [20]:
arr


Out[20]:
array([99, 99, 99, 99, 99, 99,  6,  7,  8,  9, 10])

Indexing a matrix


In [25]:
arr_2d = np.array([[5,10,15],[20,25,30],[35,40,45]])
arr_2d


Out[25]:
array([[ 5, 10, 15],
       [20, 25, 30],
       [35, 40, 45]])

In [27]:
arr_2d[2][1] # double-bracket index notation


Out[27]:
40

In [29]:
arr_2d[2,1] # single-bracket index notation


Out[29]:
40

In [30]:
arr_2d[:2,1:]


Out[30]:
array([[10, 15],
       [25, 30]])

In [31]:
arr_2d[1:,:]


Out[31]:
array([[20, 25, 30],
       [35, 40, 45]])

In [34]:
arr_2d_big = np.array([[5,10,15,20],[25,30,35,40],[45,50,55,60],[65,70,75,80]])

In [38]:
arr_2d_big[1:3,1:3] # centerpunch the shit out of this new array


Out[38]:
array([[30, 35],
       [50, 55]])

Conditional selection


In [40]:
arr = np.arange(1,11)
arr


Out[40]:
array([ 1,  2,  3,  4,  5,  6,  7,  8,  9, 10])

In [44]:
bool_arr = arr > 5
bool_arr # whaaaaat


Out[44]:
array([False, False, False, False, False,  True,  True,  True,  True,  True], dtype=bool)

In [47]:
arr[bool_arr] # mind: blown


Out[47]:
array([ 6,  7,  8,  9, 10])

the one-liner way:


In [48]:
arr[arr>5]


Out[48]:
array([ 6,  7,  8,  9, 10])

In [49]:
arr[arr<3]


Out[49]:
array([1, 2])

Exercise: slicing


In [50]:
arr_2d = np.arange(50).reshape(5,10)

In [51]:
arr_2d


Out[51]:
array([[ 0,  1,  2,  3,  4,  5,  6,  7,  8,  9],
       [10, 11, 12, 13, 14, 15, 16, 17, 18, 19],
       [20, 21, 22, 23, 24, 25, 26, 27, 28, 29],
       [30, 31, 32, 33, 34, 35, 36, 37, 38, 39],
       [40, 41, 42, 43, 44, 45, 46, 47, 48, 49]])

In [52]:
arr_2d[1:3,3:5]


Out[52]:
array([[13, 14],
       [23, 24]])

In [ ]: