NumPy "bitwise_" 開頭的函數是位運算函數。本章都是按二進制來操做的。數組
NumPy 位運算包括如下幾個函數:函數
函數 | 描述 |
---|---|
bitwise_and |
對數組元素執行位與操做 |
bitwise_or |
對數組元素執行位或操做 |
invert |
按位取反 |
left_shift |
向左移動二進制表示的位 |
right_shift |
向右移動二進制表示的位 |
注:也能夠使用 "&"、 "~"、 "|" 和 "^" 等操做符進行計算。ui
bitwise_and() 函數對數組中整數的二進制形式執行位與運算。spa
import numpy as np a, b = 13, 17 print('13 和 17 的二進制形式:',bin(a), bin(b)) print('13 和 17 的位與:',np.bitwise_and(13, 17))
輸出結果爲:code
13 和 17 的二進制形式: 0b1101 0b10001
13 和 17 的位與: 1blog
以上實例能夠用下表來講明:ci
13it |
|
1table |
1class |
0 |
1 |
17 |
1 |
0 |
0 |
0 |
1 |
and 結果 |
0 |
0 |
0 |
0 |
1 |
bitwise_or()函數對數組中整數的二進制形式執行位或運算。
import numpy as np a, b = 13, 17 print('13 和 17 的二進制形式:',bin(a), bin(b)) print('13 和 17 的位或:',np.bitwise_or(13, 17))
輸出結果爲:
13 和 17 的二進制形式: 0b1101 0b10001
13 和 17 的位或: 29
以上實例能夠用下表來講明:
13 |
|
1 |
1 |
0 |
1 |
17 |
1 |
0 |
0 |
0 |
1 |
or結果 |
1 |
1 |
1 |
0 |
1 |
invert() 函數對數組中整數進行位取反運算,即 0 變成 1,1 變成 0。
對於有符號整數,取該二進制數的補碼,而後 +1。二進制數,最高位爲0表示正數,最高位爲 1 表示負數。
看看 ~1 的計算步驟:
1
(這裏叫:原碼)轉二進制 = 00000001
11111110
1
(表示負數),將除符號位以外的其餘數字取反 = 10000001
10000010
-2
表達式 | 二進制值(2 的補數) |
十進制值 |
---|---|---|
5 | 00000000 00000000 00000000 0000010 | 5 |
~5 | 11111111 11111111 11111111 11111010 | -6 |
import numpy as np print('13 的位反轉,其中 ndarray 的 dtype 是 uint8:') print(np.invert(np.array([13], dtype=np.uint8))) print('\n') # 比較 13 和 242 的二進制表示,咱們發現了位的反轉 print('13 的二進制表示:') print(np.binary_repr(13, width=8)) print('\n') print('242 的二進制表示:') print(np.binary_repr(242, width=8))
輸出結果爲:
13 的位反轉,其中 ndarray 的 dtype 是 uint8: [242] 13 的二進制表示: 00001101 242 的二進制表示: 11110010
left_shift() 函數將數組元素的二進制形式向左移動到指定位置,右側附加相等數量的 0。
import numpy as np print('將 10 左移兩位:') print(np.left_shift(10, 2)) print('\n') print('10 的二進制表示:') print(np.binary_repr(10, width=8)) print('\n') print('40 的二進制表示:') print(np.binary_repr(40, width=8)) # '00001010' 中的兩位移動到了左邊,並在右邊添加了兩個 0。
輸出結果爲:
將 10 左移兩位: 40 10 的二進制表示: 00001010 40 的二進制表示: 00101000
right_shift() 函數將數組元素的二進制形式向右移動到指定位置,左側附加相等數量的 0。
import numpy as np print('將 40 右移兩位:') print(np.right_shift(40, 2)) print('\n') print('40 的二進制表示:') print(np.binary_repr(40, width=8)) print('\n') print('10 的二進制表示:') print(np.binary_repr(10, width=8)) # '00001010' 中的兩位移動到了右邊,並在左邊添加了兩個 0。
輸出結果爲:
將 40 右移兩位: 10 40 的二進制表示: 00101000 10 的二進制表示: 00001010