# 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:

import numpy as np

arr = np.array([41, 42, 43, 44])

x = [True, False, True, False]

newarr = arr[x]

print(newarr)
Try it Yourself »

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:

import numpy as np

arr = np.array([41, 42, 43, 44])

# Create an empty list
filter_arr = []

# go through each element in arr
for 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)
Try it Yourself »

### Example

Create a filter array that will return only even elements from the original array:

import numpy as np

arr = np.array([1, 2, 3, 4, 5, 6, 7])

# Create an empty list
filter_arr = []

# go through each element in arr
for 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)
Try it Yourself »

## 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:

import numpy as np

arr = np.array([41, 42, 43, 44])

filter_arr = arr > 42

newarr = arr[filter_arr]

print(filter_arr)
print(newarr)
Try it Yourself »

### Example

Create a filter array that will return only even elements from the original array:

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)
Try it Yourself »

### Example

Create a boolean index list for perfect squares:

import numpy as np

arr = np.array([1, 2, 3, 4, 5, 6, 7])

# Square root of number - square root's integer part should be equal to zero ( ie. there should be nothing in decimal part)
arr = (arr ** 0.5 - ( arr ** 0.5 ).astype('i')) == 0

print(arr)
Try it Yourself »

perfect square: A number that is square of an integer.

### Example

Filter the array for even elements:

import numpy as np

arr = np.array([1, 2, 3, 4, 5, 6, 7])

# arr % 2 == 0 creates a boolean array and we pass it like boolean indexing
arr = arr[arr % 2 == 0]

print(arr)
Try it Yourself »
-->