繁体   English   中英

屏蔽2D Numpy数组时出错

[英]Error when masking 2d numpy array

我不确定这里使用的是正确的术语,但是我试图使用多个数组中的多个条件来屏蔽numpy数组中的某些值。 例如,我要查找并掩盖X中数组t / l,lat2d,x和m满足特定条件的区域。 所有数组的形状相同:(250,500)。 我尝试了这个:

cs[t < 274.0 | 
   l > 800.0 |
   lat2d > 60 |
   lat2d < -60 | 
   (x > 0 & m > 0.8) |
   (x < -25 & m < 0.2)] = np.nan

输入类型不支持ufunc'bitwise_and',并且根据强制转换规则“ safe”,不能将输入安全地强制转换为任何受支持的类型。

我替换了&,| 与和/或得到错误:

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

我尝试创建蒙版:mask = t <274.0 | l> 800.0 | lat2d> 60 | lat2d <-60 | (x> 0&m> 0.8)| (x <-25&m <0.2),以便在蒙版数组中使用但得到相同的错误。

任何想法如何在Python 3中做到这一点?

这只是运算符优先级的问题:

cs[(t < 274.0) | 
   (l > 800.0) |
   (lat2d > 60) |
   (lat2d < -60) |
   ((x > 0) & (m > 0.8)) |
   ((x < -25) & (m < 0.2))] = np.nan

应该管用

您可以使用python函数,然后在数组上应用该函数。

def cond(x):
    if (np.all(t < 274.0) or np.all(l > 800.0) or np.all(lat2d > 60) or \
        np.all(lat2d < -60) or (np.all(x > 0) and np.all(m > 0.8)) or  \
        (np.all(x < -25) and np.all(m < 0.2))):
        return np.nan

然后将此函数应用于数组:

cs[:] = np.apply_along_axis(cond, 0, cs)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM