亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

Numpy 位運算

在Numpy中,以 bitwise_ 開頭的函數是位運算函數。Numpy 位運算包括以下幾個函數:

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

1. 位運算

與普通運算不同,位運算是發生在二進制形式之間的,因此在演示位運算之前,先將數據進行十進制到二進制的轉換。

1.1 numpy.bitwise_and函數

numpy.bitwise_and 函數對數組中整數的二進制形式執行位與運算。

案例

查看兩個整數的位與運算結果:

a, b = 13, 17
print(np.bitwise_and(a, b))

打印結果為:

1

先看看a和b的轉換為二進制的結果:

print("a 的二進制為:", bin(a))
print("b 的二進制為:", bin(b))

打印結果為:

a 的二進制為: 0b1101
b 的二進制為: 0b10001

a和b的位與運算可以用下表來說明:

a 0 1 1 0 1
b 1 0 0 0 1
AND 0 0 0 0 1

00001 轉化為 2 進制為 1。

1.2 numpy.bitwise_or 函數

numpy.bitwise_or 函數對數組中整數的二進制形式執行位或運算。

案例

查看兩個整數的位或運算結果:

print(np.bitwise_or(a, b))

打印結果為:

29

a和b的位或運算可以用下表來說明:

a 0 1 1 0 1
b 1 0 0 0 1
OR 1 1 1 0 1

11101轉化為十進制是24+23+22+1=29

1.3 numpy.invert函數

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

對于有符號整數,取該二進制數的補碼,然后 加1。二進制數,最高位為0表示正數,最高位為 1 表示負數。

如下是 ~1 的計算步驟:

  • 將**1**(這里叫:原碼)轉二進制 = 00000001;
  • 按位取反 = 11111110
  • 發現符號位(即最高位)為**1**(表示負數),將除符號位之外的其他數字取反 = 10000001
  • 末位加1取其補碼 = 10000010;
  • 轉換回十進制 = -2

案例

print('1的二進制表示', np.binary_repr(1, width = 8))
print('1的位反轉為', np.invert(1))

打印結果為:

1的二進制表示 00000001
1的位反轉為 -2

1.4 numpy.left_shift 函數

numpy.left_shift 函數將數組元素的二進制形式向左移動到指定位置,右側附加相等數量的 0。

案例

print('10的二進制表示:', np.binary_repr(10, width = 8))
print('10左移2位的結果:', np.left_shift(10, 2))

打印結果為:

10的二進制表示: 00001010
10左移2位的結果: 40

查看 40 的二進制:

print('40的二進制表示:', np.binary_repr(40, width = 8))
40的二進制表示: 00101000

綜合比較 10 和 40 的二進制轉換結果,可以直觀了解 numpy.left_shift 函數的運算過程。

1.5 numpy.right_shift函數

numpy.right_shift 函數將數組元素的二進制形式向右移動到指定位置,左側附加相等數量的 0。

案例

print('40的二進制表示:', np.binary_repr(40, width = 8))
print('40右移2位的結果:', np.right_shift(40, 2))

打印結果為:

40的二進制表示: 00101000
40右移2位的結果: 10

查看 40 的二進制:

print('10的二進制表示:', np.binary_repr(10, width = 8))
10的二進制表示: 00001010

綜合上述步驟,可以直觀了解numpy.left_shift函數的運算過程。

2. 小結

本小節講解了 Numpy 中常用的位運算,與普通運算不同,位運算是發生在二進制形式之間的,讀者可通過觀察二進制的轉化過程進行學習。