## matplotlib-users

 [Matplotlib-users] compound conditions with pylab.find From: Michael Hearne - 2009-04-01 21:29:38 ```Is it possible to use multiple conditionals with the pylab.find() function? For example, in Matlab, I can do the following: x = rand(1,10); i = find(x > 0.5 & x < 0.9); %returns the indices between 0.5 and 0.9 In Python: (ipython -pylab) x = rand(1,10) None of the following approaches work: #i = find(x > 0.5 and x < 0.9) #i = find(x > 0.5 && x < 0.9) #i = find(x > 0.5 & x < 0.9) I'm pretty certain there is some other way to do this using a numpy method, and if that's all there is, then I will happily use it. However, if the goal of the pylab module is to achieve (some level of) compatibility with Matlab, then may I suggest this sort of functionality be added to the pylab.find() function? Thanks, Mike ```
 Re: [Matplotlib-users] compound conditions with pylab.find From: Jeff Whitaker - 2009-04-01 21:50:45 ```Michael Hearne wrote: > Is it possible to use multiple conditionals with the pylab.find() function? > > For example, in Matlab, I can do the following: > > x = rand(1,10); > i = find(x > 0.5 & x < 0.9); %returns the indices between 0.5 and 0.9 > > In Python: (ipython -pylab) > x = rand(1,10) > > None of the following approaches work: > #i = find(x > 0.5 and x < 0.9) > #i = find(x > 0.5 && x < 0.9) > #i = find(x > 0.5 & x < 0.9) > > I'm pretty certain there is some other way to do this using a numpy > method, and if that's all there is, then I will happily use it. > > However, if the goal of the pylab module is to achieve (some level of) > compatibility with Matlab, then may I suggest this sort of functionality > be added to the pylab.find() function? > > Thanks, > > Mike > Mike: Use numpy.logical_and/numpy.logical_or for elementwise logical operations. In your case, find(logical_and(x>0.5,x<0.9)) works, as does using parantheses find((x > 0.5) & (x < 0.9)) -Jeff ```
 Re: [Matplotlib-users] compound conditions with pylab.find From: Eric Firing - 2009-04-01 21:53:08 ```Michael Hearne wrote: > Is it possible to use multiple conditionals with the pylab.find() function? > > For example, in Matlab, I can do the following: > > x = rand(1,10); > i = find(x > 0.5 & x < 0.9); %returns the indices between 0.5 and 0.9 > > In Python: (ipython -pylab) > x = rand(1,10) > > None of the following approaches work: > #i = find(x > 0.5 and x < 0.9) > #i = find(x > 0.5 && x < 0.9) > #i = find(x > 0.5 & x < 0.9) > > I'm pretty certain there is some other way to do this using a numpy > method, and if that's all there is, then I will happily use it. > > However, if the goal of the pylab module is to achieve (some level of) > compatibility with Matlab, then may I suggest this sort of functionality > be added to the pylab.find() function? This is a fundamental python/numpy problem. The workaround is x = rand(10) i = find((x > 0.5) & (x < 0.9)) Note the explicit parentheses to make the conditionals evaluated before the bitwise and. The real problem is that we are stuck using bitwise and as a surrogate for logical and. This problem is not going away any time soon, although proposed solutions have been discussed. Also note that in numpy we are using a 1-D array. If you really want the 2-D array, then you will have to index it as x[:,i]. Longer term, the recommendation is that you move away from trying to write matlab code using pylab, and instead use numpy idioms directly. import numpy as np x = np.random.rand(10) y = x[(x > 0.5) & (x < 0.9)] or if you really want the indices: i = np.nonzero((x > 0.5) & (x < 0.9))[0] Eric > > Thanks, > > Mike > > > ------------------------------------------------------------------------------ > _______________________________________________ > Matplotlib-users mailing list > Matplotlib-users@... > https://lists.sourceforge.net/lists/listinfo/matplotlib-users ```