subsampling every nth entry in a numpy array

StackOverflow

I am a beginner with numpy, and I am trying to extract some data from a long numpy array. What I need to do is start from a defined position in my array, and then subsample every nth data point from that position, until the end of my array.

basically if I had

a = [1,2,3,4,1,2,3,4,1,2,3,4....] 

I want to subsample this to start at a[1] and then sample every fourth point from there, to produce something like

b = [2,2,2.....]

Answer rating: 189

You can use numpy"s slicing, simply start:stop:step.

>>> xs
array([1, 2, 3, 4, 1, 2, 3, 4, 1, 2, 3, 4])
>>> xs[1::4]
array([2, 2, 2])

This creates a view of the the original data, so it"s constant time. It"ll also reflect changes to the original array and keep the whole original array in memory:

>>> a
array([1, 2, 3, 4, 5])
>>> b = a[::2]         # O(1), constant time
>>> b[:] = 0           # modifying the view changes original array
>>> a                  # original array is modified
array([0, 2, 0, 4, 0])

so if either of the above things are a problem, you can make a copy explicitly:

>>> a
array([1, 2, 3, 4, 5])
>>> b = a[::2].copy()  # explicit copy, O(n)
>>> b[:] = 0           # modifying the copy
>>> a                  # original is intact
array([1, 2, 3, 4, 5])

This isn"t constant time, but the result isn"t tied to the original array. The copy also contiguous in memory, which can make some operations on it faster.





Get Solution for free from DataCamp guru