NumPy學習筆記12.位運算

NumPy位運算

NumPy"bitwise_"開頭的函數是位運算函數。包括以下幾個函數:

函數 描述
bitwise_and 對數組元素執行位與操作
bitwise_or 對數組元素執行位或操作
invert 按位取反
left+shift 向左移動二進制表示的位
right_shift 向右移動二進制表示的位

注:也可適用“&”,“~”,“ | ”和“^”等操作符進行計算。

bitwise_and

import numpy as np

print('13和17的二進制形式:')
a,b = 13,17
print(bin(a),bin(b))
print('\n')

print('13和17的位與:')
print(np.bitwise_and(13,17))
13和17的二進制形式:
0b1101 0b10001


13和17的位與:
1

位與操作符的規律表格說明:

A B AND
1 1 1
1 0 0
0 1 0
0 0 0

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

位或操作符的規律表格說明:

A B OR
1 1 1
1 0 1
0 1 1
0 0 0

invert

invert()函數對數組中整數進行位取反運算,即0變成1,1變成0。
對於有符號整數,取該二進制數的補碼,然後+1,二進制數,最高位爲0表示正數,最高位爲1表示負數

~1的計算步驟:

  • 將1(這裏叫:原碼)轉二進制 = 00000001
  • 按位取反 = 111111110
  • 發現符號位(即最高位)爲1(表示負數),將除符號之外的其它數字取反 = 10000001
  • 末位加1取其補碼 = 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

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

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

學習參考:

發佈了60 篇原創文章 · 獲贊 3 · 訪問量 1萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章