2011-09-12 52 views
2

对于大型数组,检查多个条件都是True还是两个都是False的最快方法是什么?运营商的选择是否有所作为?为什么或者为什么不?这是一个虚拟的例子:检查两个条件是否为真的最快方法是什么?

import numpy 
a = numpy.ones((1000000,)) 
b = numpy.zeros((1000000,)) 

#c = (a == 1) * (b == 0) 
#c = (a == 1) & (b == 0) 
# other faster method of getting c? 

通知编辑...

+1

通知编辑,只是为了清楚两个阵列的情况并不总是相同的... – Benjamin

+2

此优化是否有用?你有没有分析你的代码,发现这部分太慢? – Daenyth

+0

@Daenyth:只是好奇心。 – Benjamin

回答

0

我不敢肯定,这将会对速度无所谓,但是你可以通过在这种情况下使用就地操作节省内存。

试着这么做:

c = a == 1 
c &= b == 0 # (Or *=) 

这应该需要阵列的一个较少的临时副本,并使用更少的内存。

+0

好点。是&=快于* =还是等同? – Benjamin

+0

据我所知,在任何正常情况下都不应该有显着差异。我的快速肮脏的分析似乎同意。 –

0

您可能会利用Short-circuiting的运营商。而这种短路在不同运营商的不同情况下是不同的。

+0

在numpy数组的情况下,这没有帮助。结果是另一个长度相同的数组。没有什么可以短路的。 –

相关问题