Numpy | 13 位運算

NumPy "bitwise_" 開頭的函數是位運算函數。本章都是按二進制來操做的。數組

 

NumPy 位運算包括如下幾個函數:函數

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

注:也能夠使用 "&"、 "~"、 "|" 和 "^" 等操做符進行計算。ui

 

bitwise_and

  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

  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

invert() 函數對數組中整數進行位取反運算,即 0 變成 1,1 變成 0。

對於有符號整數,取該二進制數的補碼,而後 +1。二進制數,最高位爲0表示正數,最高位爲 1 表示負數。

看看 ~1 的計算步驟:

    • 1(這裏叫:原碼)轉二進制 = 00000001
    • 按位取反 = 11111110
    • 發現符號位(即最高位)爲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
相關文章
相關標籤/搜索