# How do you find the IQR in Numpy?

## Question:

Is there a baked-in Numpy/Scipy function to find the interquartile range? I can do it pretty easily myself, but `mean()` exists which is basically `sum/len`

``````def IQR(dist):
return np.percentile(dist, 75) - np.percentile(dist, 25)
``````

`np.percentile` takes multiple percentile arguments, and you are slightly better off doing:

``````q75, q25 = np.percentile(x, [75 ,25])
iqr = q75 - q25
``````

or

``````iqr = np.subtract(*np.percentile(x, [75, 25]))
``````

than making two calls to `percentile`:

``````In [8]: x = np.random.rand(1e6)

In [9]: %timeit q75, q25 = np.percentile(x, [75 ,25]); iqr = q75 - q25
10 loops, best of 3: 24.2 ms per loop

In [10]: %timeit iqr = np.subtract(*np.percentile(x, [75, 25]))
10 loops, best of 3: 24.2 ms per loop

In [11]: %timeit iqr = np.percentile(x, 75) - np.percentile(x, 25)
10 loops, best of 3: 33.7 ms per loop
``````

There is now an `iqr` function in `scipy.stats`. It is available as of scipy 0.18.0. My original intent was to add it to numpy, but it was considered too domain-specific.

You may be better off just using Jaime’s answer, since the scipy code is just an over-complicated version of the same.

Ignore this if Jaime’s answer works for your case. But if not, according to this answer, to find the exact values of 1st and 3rd quartiles, you should consider doing something like:

``````samples = sorted([28, 12, 8, 27, 16, 31, 14, 13, 19, 1, 1, 22, 13])

def find_median(sorted_list):
indices = []

list_size = len(sorted_list)
median = 0

if list_size % 2 == 0:
indices.append(int(list_size / 2) - 1)  # -1 because index starts from 0
indices.append(int(list_size / 2))

median = (sorted_list[indices[0]] + sorted_list[indices[1]]) / 2
pass
else:
indices.append(int(list_size / 2))

median = sorted_list[indices[0]]
pass

return median, indices
pass

median, median_indices = find_median(samples)
Q1, Q1_indices = find_median(samples[:median_indices[0]])
Q2, Q2_indices = find_median(samples[median_indices[-1] + 1:])

IQR = Q3 - Q1

quartiles = [Q1, median, Q2]
``````

Code taken from the referenced answer.

Categories: questions Tags: , ,
Answers are sorted by their score. The answer accepted by the question owner as the best is marked with
at the top-right corner.