On Mon, Sep 7, 2009 at 2:46 PM, <nathanielpeterso...@gmail.com> wrote:
> Let > > a=np.ma.masked_invalid(np.array([-1,np.nan,-2,-3, np.nan])) > b=np.ma.masked_invalid(np.array([-2,-3, -1,np.nan,np.nan])) > > I'd like to choose the lesser element (component-wise) of a and b. > > If the two elements are comparable, I want the lesser element. > If one element is a number and the other is nan, then I want the number. > And if both elements are nan, then I'd like resultant element be nan. > > In other words, I'd like the result to equal > > np.array([-2,-3,-2,-3,np.nan]) > > This is what I've tried: > > #!/usr/bin/env python > import numpy as np > a=np.ma.masked_invalid(np.array([-1,np.nan,-2,-3,np.nan])) > b=np.ma.masked_invalid(np.array([-2,-3, -1,np.nan,np.nan])) > very_large_num=10 > a=np.ma.filled(a,very_large_num) > print(a) > # [ -1. 10. -2. -3. 10.] > b=np.ma.filled(b,very_large_num) > print(b) > # [ -2. -3. -1. 10. 10.] > result=np.ma.where(np.ma.less(a,b),a,b) > print(result) > # [ -2. -3. -2. -3. 10.] > > And this almost works, except that: > > [*] when both elements are nan, I'm getting my fill value (0) instead of > nan. > [*] I can guarantee all elements of a and b are either nan or less than > some very_large_num, but if there is a solution that works without declaring > very_large_num, I'd prefer that. > > What is the numpy way to choose lesser values in this situation? > __ The fmin ufunc has the behaviour you want. Chuck
_______________________________________________ NumPy-Discussion mailing list NumPy-Discussion@scipy.org http://mail.scipy.org/mailman/listinfo/numpy-discussion