我有一个3D数组,即param
:
param.shape = (20, 50, 50)
我想掩盖其在一个区间之外的第一个轴,即两个2D阵列,bot
和top
:
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()
实际上,我想提取param
值bot
和top
之间的值{/ p}。
答案 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区间。
所以,是的,写下你自己的面具。