# Downsampling a 2d numpy array in python

## Question:

I’m self learning python and have found a problem which requires down sampling a feature vector. I need some help understanding how down-sampling a array. in the array each row represents an image by being number from `0`

to `255`

. I was wonder how you apply down-sampling to the array? I don’t want to `scikit-learn`

because I want to understand how to apply down-sampling.

If you could explain down-sampling too that would be amazing thanks.

the feature vector is 400×250

## Answers:

If with downsampling you mean something like this, you can simply slice the array. For a 1D example:

```
import numpy as np
a = np.arange(1,11,1)
print(a)
print(a[::3])
```

The last line is equivalent to:

```
print(a[0:a.size:3])
```

with the slicing notation as `start:stop:step`

Result:

[ 1 2 3 4 5 6 7 8 9 10]

[ 1 4 7 10]

For a 2D array the idea is the same:

```
b = np.arange(0,100)
c = b.reshape([10,10])
print(c[::3,::3])
```

This gives you, in both dimensions, every third item from the original array.

Or, if you only want to down sample a single dimension:

```
d = np.zeros((400,250))
print(d.shape)
e = d[::10,:]
print(e.shape)
```

(400, 250)

(40, 250)

The are lots of other examples in the Numpy manual

```
from skimage.measure import block_reduce
b = block_reduce(matrix, block_size=(m, n), func=np.mean/np.max/..)
```

from skimage.measure import block_reduce

new_matrix=block_reduce(Matrix_for_downsample,block_size=(m,n),func=np.mean/np.max/..)