NumPy Filter Array
Filtering Arrays
Getting some elements out of an existing array and creating a new array out of them is called filtering.
In NumPy, you filter an array using a boolean index list.
A boolean index list is a list of booleans corresponding to indexes in the array.
If the value at an index is True
that element is contained in the filtered array, if the value at that index is False
that element is excluded from the filtered array.
Example
Create an array from the elements on index 0 and 2:
123456789
import numpy as np arr = np.array([41, 42, 43, 44]) x = [True, False, True, False] newarr = arr[x] print(newarr)
The example above will return [41, 43]
, why?
Because the new filter contains only the values where the filter array had the value True
, in this case, index 0 and 2.
Creating the Filter Array
In the example above we hard-coded the True
and False
values, but the common use is to create a filter array based on conditions.
Example
Create a filter array that will return only values higher than 42:
12345678910111213141516171819
import numpy as np arr = np.array([41, 42, 43, 44]) # Create an empty listfilter_arr = [] # go through each element in arrfor element in arr: # if the element is higher than 42, set the value to True, otherwise False: if element > 42: filter_arr.append(True) else: filter_arr.append(False) newarr = arr[filter_arr] print(filter_arr)print(newarr)
Create a filter array that will return only even elements from the original array:
12345678910111213141516171819
import numpy as np arr = np.array([1, 2, 3, 4, 5, 6, 7]) # Create an empty listfilter_arr = [] # go through each element in arrfor element in arr: # if the element is completely divisble by 2, set the value to True, otherwise False if element % 2 == 0: filter_arr.append(True) else: filter_arr.append(False) newarr = arr[filter_arr] print(filter_arr)print(newarr)
Creating Filter Directly From Array
The above example is quite a common task in NumPy and NumPy provides a nice way to tackle it.
We can directly substitute the array instead of the iterable variable in our condition and it will work just as we expect it to.
Example
Create a filter array that will return only values higher than 42:
12345678910
import numpy as np arr = np.array([41, 42, 43, 44]) filter_arr = arr > 42 newarr = arr[filter_arr] print(filter_arr)print(newarr)
Example
Create a filter array that will return only even elements from the original array:
12345678910
import numpy as np arr = np.array([1, 2, 3, 4, 5, 6, 7]) filter_arr = arr % 2 == 0 newarr = arr[filter_arr] print(filter_arr)print(newarr)