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

Asked By: Neo Streets

||

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

Answered By: Bart
from skimage.measure import block_reduce

b = block_reduce(matrix, block_size=(m, n), func=np.mean/np.max/..)
Answered By: Md. Monirul Islam

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

Answered By: Md. Monirul Islam
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.