indexing numpy array with logical operator

arrays, indexing, numpy, python

Solution

This should work

np.where((a1[:,1]>l1) & (a1[:,1]<l2))

or

np.where(np.logical_and(a1[:,1]>l1, a1[:,1]<l2))

Problem

I have a 2d numpy array, for instance as: ``` import numpy as np a1 = np.zeros( (500,2) ) a1[:,0]=np.arange(0,500) a1[:,1]=np.arange(0.5,1000,2) # could be also read from txt ``` then I want to select the indexes corresponding to a slice that matches a criteria such as all the value a1[:,1] included in the range (l1,l2): ``` l1=20.0; l2=900.0; #as example ``` I'd like to do in a condensed expression. However, neither: ``` np.where(a1[:,1]>l1 and a1[:,1]<l2) ``` (it gives ValueError and it suggests to use np.all, which it is not clear to me in such a case); neither: ``` np.intersect1d(np.where(a1[:,1]>l1),np.where(a1[:,1]<l2)) ``` is working (it gives unhashable type: 'numpy.ndarray') My idea is then to use these indexes to map another array of size (500,n). Is there any reasonable way to select indexes in such way? Or: is it necessary to use some mask in such case?

Original source