John [H2O] <washakie <at> gmail.com> writes: > What I am trying to do (obviously?) is find all the values of X that fall > within a time range. > > Specifically, one point I do not understand is why the following two methods > fail: > > --> 196 ind = np.where( (t1 < Y[:,0] < t2) ) #same result > with/without inner parens > TypeError: can't compare datetime.datetime to numpy.ndarray > > OR trying the 'and' method: > > --> 196 ind = np.where( (Y[:,0]>t1) and (Y[:,0]<t2) ) > ValueError: The truth value of an array with more than one element is > ambiguous. Use a.any() or a.all() >
Use (t1 < Y[:,0]) & (Y[:,0] < t2). The python keywords 'and' and 'or' can't be overloaded, but the bitwise operators can be (and are) overloaded by arrays. Conditionals like a < x < b are converted to (a < x) and (x < b), which is why they don't work either. There is a proposal to enable overloadable 'and' and 'or' methods (http://www.python.org/dev/peps/pep-0335/), but I don't think it's ever got enough support to be accepted. Also, if you don't need the indices, you can just use the conditional expression as a boolean mask: >>> condition = (t1 < Y[:,0]) & (Y[:,0] < t2) >>> Y[:,0][condition] Neil _______________________________________________ Numpy-discussion mailing list [email protected] http://mail.scipy.org/mailman/listinfo/numpy-discussion
