2016-12-06 72 views
2

考慮以下numpy的數組的數組:還原NumPy的的bitwise_and功能

x = np.array([2]*4, dtype=np.uint8) 

這僅僅是四個2的陣列。

我想執行該陣列的bitwise_and還原:

y = np.bitwise_and.reduce(x) 

我希望得到的結果是:

2 

因爲該數組的每個元素是相同的,因此連續AND的應產生相同的結果,但我得到:

0 

爲什麼這種差異?

+0

[相關問題](http://stackoverflow.com/questions/21050875)在的情況下一個聰明的解決方法你被卡住你當前安裝的Python – gnarledRoot

回答

3

reduce文檔字符串,它解釋的功能相當於

r = op.identity # op = ufunc 
for i in range(len(A)): 
    r = op(r, A[i]) 
return r 

的問題是,np.bitwise_and.identity爲1:

In [100]: np.bitwise_and.identity 
Out[100]: 1 

對於像您期望的reduce方法工作,身份將必須是所有位設置爲1的整數。

上述代碼使用numpy 1.11.2運行。這個問題一直fixed in the development version of numpy

In [3]: np.__version__ 
Out[3]: '1.13.0.dev0+87c1dab' 

In [4]: np.bitwise_and.identity 
Out[4]: -1 

In [5]: x = np.array([2]*4, dtype=np.uint8) 

In [6]: np.bitwise_and.reduce(x) 
Out[6]: 2