2011-09-12 43 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數組的情況下,這沒有幫助。結果是另一個長度相同的數組。沒有什麼可以短路的。 –

相關問題