On 2014/03/13 9:09 PM, Sudheer Joseph wrote:
> Dear Oslen,
>
> I had  a detailed look at the example you send and points I got were below
>
> a = np.arange(-8, 8).reshape((4, 4))
> b = ma.masked_array(a, mask=a < 0)
>
>
> Out[33]: b[b<4]
> masked_array(data = [-- -- -- -- -- -- -- -- 0 1 2 3],
>               mask = [ True  True  True  True  True  True  True  True False 
> False False False],
>         fill_value = 999999)
> In [34]: b[b<4].shape
> Out[34]: (12,)
> In [35]: b[b<4].data
> Out[35]: array([-8, -7, -6, -5, -4, -3, -2, -1,  0,  1,  2,  3])
>
> This shows while numpy can do the bolean operation and list the data meeting 
> the criteria( by masking the data further), it do not actually allow us get 
> the count of data that meets the crieteria. I was interested in count. 
> Because my objective was to find out how many numbers in the grid fall under 
> different catagory.( <=4 , >4 & <=8 , >8<=10) etc. and find the percentage of 
> them.
>
>   Is there a way to get the counts correctly ? that is my botheration now !!

Certainly.  If all you need are statistics of the type you describe, 
where you are working with a 1-D array, then extract the unmasked values 
into an ordinary ndarray, and work with that:

a = np.random.randn(100)
am = np.ma.masked_less(a, -0.2)
print am.count()  # number of masked values
a_nomask = am.compressed()
print type(a_nomask)
print a_nomask.shape

# number of points with value less than 0.5:
print (a_nomask < 0.5).sum()
# (Boolean True is 1)

# Or if you want the actual array of values, not just the count:
a_nomask[a_nomask < 0.5]

Eric



>
> with best regards,
> Sudheer

_______________________________________________
NumPy-Discussion mailing list
[email protected]
http://mail.scipy.org/mailman/listinfo/numpy-discussion

Reply via email to