我想检查数组中的条件并对满足条件的位置执行操作。例如,这段代码完成了这项工作:
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给出的错误是条件检查不在带有多个元素的数组中工作。有没有办法让我的代码更快?
答案 0 :(得分:1)
您无法使用not
或与数组进行链式比较,因为not
和链式比较都无法实现广播。
将链式比较拆分为两个比较,并使用~
和&
代替not
和and
,因为NumPy在布尔数组上使用按位运算符进行布尔运算:
x[~((6 < res) & (res < 18))] = numpy.nan