Home > OS >  Masked Array - Count the value in a specific interval
Masked Array - Count the value in a specific interval

Time:03-25

I am quite new to masked arrays and satellite data. I am trying to figure out how to count the number of elements in a masked_array that are in between an interval e.g. say 40 to 80. This is what I have:

This is the summary of my masked array named 'grid'.

masked_array(
  data=[[[120, 120, 120, ..., 200, 200, 200],
         [120, 120, 120, ..., 200, 200, 200],
         [120, 120, 120, ..., 200, 200, 200],
         ...,
         [120, 120, 120, ..., 200, 200, 200],
         [120, 120, 120, ..., 200, 200, 200],
         [120, 120, 120, ..., 200, 200, 200]]],
  mask=False,
  fill_value=999999,
  dtype=uint8)

I want to calculate the % of elements in the masked_array that are between 40 and 80. I tried.

masked  = ma.masked_where((grid >= 40) & (grid <= 80), grid)
green_ratio = masked.count()/grid.count()

but this is returning 1 which is quite unlikely given that I see that there are values larger than 120.

Any idea on how to do this?

CodePudding user response:

masked.count() still gives you the total unfiltered number of values which is of course equal to grid.count().

Since masked.mask is a boolean array, you could do for example masked.mask.sum()/grid.count() to limit the ratio to those values which meet your condition.

  • Related