Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How do I select a range of two numpy indices?

I have a simple numpy array, and I want to make a separate array that takes every two elements per two indices

For example:

x = np.arange(0,20)

print(x)
[ 0  1  2  3  4  5  6  7  8  9 10 11 12 13 14 15 16 17 18 19]

My goal is to get an array of

[2 3 6 7 10 11 14 15 18 19]

How might I do that? I tried this:

print(x[1:len(x)-1:2])

[ 1  3  5  7  9 11 13 15 17]

but I only get every other index.

like image 615
wabash Avatar asked Sep 02 '25 05:09

wabash


1 Answers

You can simply do this using the traditional start:stop:step convention without any modulo by reshaping your array, indexing, and then flattening it back. Try this -

  1. By reshaping it to (-1,2) you create bi-gram sequence
  2. Then you simply start from 1 and step 2 times
  3. Last you flatten it back.
x.reshape(-1,2)[1::2].flatten()
array([ 2,  3,  6,  7, 10, 11, 14, 15, 18, 19])

This should be significantly faster than approaches where mathematical operations are being used to check each value since this is just reshaping and indexing.

like image 139
Akshay Sehgal Avatar answered Sep 04 '25 17:09

Akshay Sehgal