掩模在两个2D阵列的间隔之外?

时间:2017-01-05 12:38:02

标签: python numpy mask

我有一个3D数组,即param

param.shape = (20, 50, 50)

我想掩盖其在一个区间之外的第一个轴,即两个2D阵列,bottop

bot.shape = (50, 50)
top.shape = (50, 50)

我试过的是:

bot_n = np.broadcast_to(bot[0, :, :], param.shape)
top_n = np.broadcast_to(top[0, :, :], param.shape)
output =  np.ma.masked_outside(param, bot_n, top_n)

但是我收到了以下错误:

  

如果v2< V1:
  ValueError:具有多个元素的数组的真值是不明确的。使用a.any()或a.all()

实际上,我想提取parambottop之间的值{/ p}。

2 个答案:

答案 0 :(得分:0)

你可以自己构建面具:

output = np.ma.array(param, (param < bot_n) & (param > top_n))

答案 1 :(得分:0)

masked_outside的代码非常简单:

if v2 < v1:
    (v1, v2) = (v2, v1)
xf = filled(x)
condition = (xf < v1) | (xf > v2)
return masked_where(condition, x, copy=copy)

condition1表达式适用于您的数组bot_n,但if v2<v1测试仅适用于标量限制。函数作者考虑的是一个简单的[3, 9]区间,而不是更一般的2d区间。

所以,是的,写下你自己的面具。