1、番外說明
大家好,我是小P,本系列是本人對Python模塊Numpy的一些學習記錄,總結於此一方面方便其它初學者學習,另一方面害怕自己遺忘,希望大家喜歡。此外,對“目標檢測/模型壓縮/語義分割”感興趣的小夥伴,歡迎加入QQ羣 813221712 討論交流,進羣請看羣公告!(可以點擊如下連接直接加入!)
點擊鏈接加入羣聊【Object Detection】:https://jq.qq.com/?_wv=1027&k=5kXCXF8
2、正題
參考鏈接:
https://www.runoob.com/numpy/numpy-binary-operators.html
NumPy “bitwise_” 開頭的函數是位運算函數。
NumPy 位運算包括以下幾個函數:
注:也可以使用 “&”、 “~”、 “|” 和 “^” 等操作符進行計算。
2.1 bitwise_and
bitwise_and()函數對數組中整數的二進制形式執行位與運算。
實例:bitwise_and()的使用
import numpy as np
print ('13 和 17 的二進制形式:')
a,b = 13,17
print (bin(a), bin(b))
print ('13 和 17 的位與:')
print (np.bitwise_and(13, 17))
輸出結果爲:
13 和 17 的二進制形式:
0b1101 0b10001
13 和 17 的位與:
1
以上實例可以用下表來說明:
位與操作運算規律如下:
2.2 bitwise_or
bitwise_or()函數對數組中整數的二進制形式執行位與運算。
實例:bitwise_or的使用
import numpy as np
a,b = 13,17
print ('13 和 17 的二進制形式:')
print (bin(a), bin(b))
print ('13 和 17 的位或:')
print (np.bitwise_or(13, 17))
輸出結果爲:
13 和 17 的二進制形式:
0b1101 0b10001
13 和 17 的位或:
29
以上實例可以用下表來說明:
位或操作運算規律如下:
2.3 invert
invert() 函數對數組中整數進行位取反運算,即 0 變成 1,1 變成 0。
對於有符號整數,取該二進制數的補碼,然後 +1。二進制數,最高位爲0表示正數,最高位爲 1 表示負數。
看看 ~1 的計算步驟:
● 將1(這裏叫:原碼)轉二進制 = 00000001
● 按位取反 = 11111110
● 發現符號位(即最高位)爲1(表示負數),將除符號位之外的其他數字取反 = 10000001
● 末位加1取其補碼 = 10000010
● 轉換回十進制 = -2
實例:invert按位取反操作
import numpy as np
print ('13 的位反轉,其中 ndarray 的 dtype 是 uint8:')
print (np.invert(np.array([13], dtype = np.uint8)))
# 比較 13 和 242 的二進制表示,我們發現了位的反轉
print ('13 的二進制表示:')
print (np.binary_repr(13, width = 8))
print ('242 的二進制表示:')
print (np.binary_repr(242, width = 8))
輸出結果爲:
13 的位反轉,其中 ndarray 的 dtype 是 uint8:
[242]
13 的二進制表示:
00001101
242 的二進制表示:
11110010
2.4 left_shift
left_shift() 函數將數組元素的二進制形式向左移動到指定位置,右側附加相等數量的 0。
實例:left_shift使用
import numpy as np
print ('將 10 左移兩位:')
print (np.left_shift(10,2))
print ('10 的二進制表示:')
print (np.binary_repr(10, width = 8))
print ('40 的二進制表示:')
print (np.binary_repr(40, width = 8))
# '00001010' 中的兩位移動到了左邊,並在右邊添加了兩個 0。
輸出結果爲:
將 10 左移兩位:
40
10 的二進制表示:
00001010
40 的二進制表示:
00101000
2.5 right_shift
right_shift() 函數將數組元素的二進制形式向右移動到指定位置,左側附加相等數量的 0。
實例:right_shift使用
import numpy as np
print ('將 40 右移兩位:')
print (np.right_shift(40,2))
print ('40 的二進制表示:')
print (np.binary_repr(40, width = 8))
print ('10 的二進制表示:')
print (np.binary_repr(10, width = 8))
# '00001010' 中的兩位移動到了右邊,並在左邊添加了兩個 0。
輸出結果爲:
將 40 右移兩位:
10
40 的二進制表示:
00101000
10 的二進制表示:
00001010