掩盖2d numpy数组

时间:2017-03-27 07:28:22

标签: python python-3.x numpy numpy-ndarray valueerror

我不确定这里的正确术语是什么,但我试图使用多个数组中的多个条件来屏蔽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&#39; bitwise_and&#39;输入类型不支持,并且输入无法根据投射规则安全地强制转换为任何支持的类型&#39;&#39;安全&#39;

我替换了&amp;,|用和/或得到错误:

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

我尝试过制作面具:mask = t&lt; 274.0 | l&gt; 800.0 | lat2d&gt; 60 | lat2d&lt; -60 | (x> 0&amp; m> 0.8)| (x <-25&amp; m&lt; 0.2),以便在掩模阵列中使用但得到相同的误差。

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

2 个答案:

答案 0 :(得分:1)

这只是运营商优先权问题:

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

应该有效

答案 1 :(得分:0)

你可以使用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)