13、Numpy位運算

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
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章