检查数组中的条件

时间:2017-12-14 21:08:43

标签: python arrays numpy conditional-statements

我想检查数组中的条件并对满足条件的位置执行操作。例如,这段代码完成了这项工作:

res = somefunction(x)
for i in range(x.shape[0]):
    for j in range(x.shape[1]):
        if not 6 < res[i,j] < 18:
            x[i,j] = float('nan')

但我认为更快(更短)的方式可能是这样的:

x[not 6 < somefunction(x) < 18] = float('nan')

但是python给出的错误是条件检查不在带有多个元素的数组中工作。有没有办法让我的代码更快?

1 个答案:

答案 0 :(得分:1)

您无法使用not或与数组进行链式比较,因为not和链式比较都无法实现广播。

将链式比较拆分为两个比较,并使用~&代替notand,因为NumPy在布尔数组上使用按位运算符进行布尔运算:

x[~((6 < res) & (res < 18))] = numpy.nan