Masked Array - 计算特定区间内的值

Masked Array - Count the value in a specific interval

我对屏蔽阵列和卫星数据还很陌生。我想弄清楚如何计算 masked_array 中介于间隔之间的元素数量,例如说 40 到 80。这就是我的:

这是我的名为 '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)

我想计算 masked_array 中 40 到 80 之间元素的百分比。我试过了。

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

但这是返回 1 的可能性很小,因为我看到有大于 120 的值。

知道怎么做吗?

masked.count() 仍然为您提供未过滤的总值数,这当然等于 grid.count().

由于 masked.mask 是一个布尔数组,例如,您可以 masked.mask.sum()/grid.count() 将比率限制为满足您条件的那些值。