Home > Mobile >  Numpy 2D indexing of a 1D array with known min, max indices
Numpy 2D indexing of a 1D array with known min, max indices

Time:12-17

I have a 1D numpy array of False booleans, and a 2D numpy array containing the min,max indices of values in the first array to change to True.

An example:

my_data = numpy.zeros((10,), dtype=bool)
inds2true = numpy.array([[1, 3], [8, 9]])

And I want the following result:

out = numpy.array([False, True, True, True, False,  False,  False,  False, True, True])

How is this possible in Python with Numpy?

CodePudding user response:

import numpy as np
my_data = np.zeros((10,), dtype=bool)
inds2true = np.array([[1, 3], [8, 9]])
indeces = []
for ix_range in inds2true:
    indeces  = list(range(ix_range[0], ix_range[1]   1))
my_data[indeces] = True

CodePudding user response:

There's one rule-breaking hack:

my_data[inds2true] = True
my_data = np.cumsum(my_data) % 2 == 1
my_data
>>> array([False,  True,  True, False, False, False, False, False,  True, False])

The most common practise is to change indices within np.arange([1, 3]) and np.arange([8, 9]), not including 3 or 9. If you still want to include them, do in addition: my_data[inds2true[:, 1]] = True

If you're looking for other options to do it in one go, the most probably it will include np.cumsum tricks.

  • Related