我是否更喜欢使用numpy.where或数组索引来屏蔽值?

我是否更喜欢使用numpy.where或数组索引来屏蔽值?,numpy,Numpy,我大量使用数组索引来清除数组中的无效值。大概是这样的: 数组[array==0]=无效的_值 对于这些类型的遮罩,我应该使用numpy.where作为: array=numpy.where(array==0,无效的_值,数组) 这取决于你的意图。第一个操作就地修改数组,而第二个操作复制并覆盖引用 如果您不介意就地修改,我的快速测试表明,第一个选项大约快4倍 In [7]: foo = np.random.randint(0, 10, 10000) In [8]: invalid = -1 I

我大量使用数组索引来清除数组中的无效值。大概是这样的:

数组[array==0]=无效的_值

对于这些类型的遮罩,我应该使用
numpy.where
作为:

array=numpy.where(array==0,无效的_值,数组)


这取决于你的意图。第一个操作就地修改数组,而第二个操作复制并覆盖引用

如果您不介意就地修改,我的快速测试表明,第一个选项大约快4倍

In [7]: foo = np.random.randint(0, 10, 10000)

In [8]: invalid = -1

In [9]: bar = foo.copy()

In [10]: %timeit bar[foo==0] = invalid
10000 loops, best of 3: 45.5 us per loop

In [11]: %timeit np.where(foo==0, invalid, foo)
1000 loops, best of 3: 209 us per loop
请注意,
foo
未更改,而
bar
已修改:

In [12]: np.count_nonzero(foo)
Out[12]: 8984

In [13]: np.count_nonzero(bar)
Out[13]: 10000