# Looking for module for shrinking a list with n-point means

John Machin sjmachin at lexicon.net
Fri May 22 13:00:19 CEST 2009

```On May 22, 8:03 pm, Yash Ganthe <yas... at gmail.com> wrote:
> Hi,
>
> I would like to shrink a large list in the following way:
> If the List has 1000 integers, we need only 100 averages such that the
> 1000 points are average for every 10 consecutive values. So p0 to p9
> will be averaged to obtain t0. p10 to p19 will be averaged to obtain
> t1 and so on. This is a 10-point mean.
>
> We are doing this as we collect a lot of data and plot it on a graph.
> Too many samples makes the graph cluttered. So we need to reduce the
> number of values in the way described above.
>
> Does SciPy or NumPy

What do their docs say?

> or any other module have functions for achieving
> this?
>
> Which function can be used for doing this?

Perhaps one like this:

| >>> def n_point_means(alist, n):
| ...     blist = alist[:]
| ...     blist.sort()
| ...     size = len(blist)
| ...     assert 1 <= n <= size
| ...     assert size % n == 0
| ...     clist = []
| ...     fn = float(n)
| ...     for i in xrange(0, size, n):
| ...         clist.append(sum(blist[i:i+n]) / fn)
| ...     return clist
| ...
| >>> aaa = [9,8,7,6,5,4,3,2,0]
| >>> n_point_means(aaa,2)
| Traceback (most recent call last):
|   File "<stdin>", line 1, in <module>
|   File "<stdin>", line 6, in n_point_means
| AssertionError
| >>> aaa = [9,8,7,6,5,4,3,2,1,0]
| >>> n_point_means(aaa,2)
| [0.5, 2.5, 4.5, 6.5, 8.5]
| >>> n_point_means(aaa,5)
| [2.0, 7.0]
| >>>

Does that do what you want? If your requirement is so simple, why not
write it yourself?

```