NumPy - 位元組交換



在 NumPy 中交換陣列的軸

位元組交換是一個用於在不同位元組順序(也稱為大小端)之間轉換資料的方法。在計算中,不同的系統可能使用不同的位元組順序來表示多位元組資料型別(例如,整數、浮點數)。位元組交換確保在位元組順序不同的系統之間傳輸資料時能夠正確解釋資料。

NumPy 提供了byteswap() 函式來交換陣列的位元組順序。當您需要將資料轉換為與其他系統或格式相容的正確大小端順序時,這尤其有用。

理解位元組序

位元組序(大小端)是位元組在較大資料型別中排序的順序。主要有兩種位元組序:

  • 小端序 - 最低有效位元組儲存在最小地址處。例如,在數字 0x1234 中,0x34 將首先儲存。
  • 大端序 - 最高有效位元組儲存在最小地址處。對於相同的數字 0x1234,0x12 將首先儲存。

numpy.ndarray.byteswap() 函式

numpy.ndarray.byteswap() 函式用於交換 NumPy 陣列中元素的位元組順序。此函式在兩種表示形式之間切換:大端和小端。

byteswap() 函式用於具有特定資料型別的陣列,並且不會影響陣列的形狀或大小。以下是語法:

numpy.ndarray.byteswap(inplace=False)

其中,如果inplace 為“True”,則陣列將就地修改。如果為“False”(預設值),則返回一個具有交換位元組的新陣列。

示例:交換簡單陣列中的位元組

在以下示例中,我們使用 NumPy 中的 byteswap() 函式交換陣列中的位元組:

import numpy as np 
a = np.array([1, 256, 8755], dtype = np.int16) 

print ('Our array is:', a)

print ('Representation of data in memory in hexadecimal form:', map(hex,a))
# We can see the bytes being swapped
print ('Applying byteswap() function:', a.byteswap())
print ('In hexadecimal form:', map(hex,a))

獲得以下輸出:

Our array is: [   1  256 8755]
Representation of data in memory in hexadecimal form: <map object at 0x7fdfa46a3370>
Applying byteswap() function: [  256     1 13090]
In hexadecimal form: <map object at 0x7fdff5867190>

示例:就地位元組交換

透過在 byteswap() 函式中將“inplace”引數設定為“True”,我們可以就地修改陣列,直接在原始陣列中交換位元組:

import numpy as np

# Creating a NumPy array with 32-bit integers
arr = np.array([1, 256, 65535], dtype=np.int32)

print("Original Array:")
print(arr)

# Perform in-place byte swapping
arr.byteswap()

print("\nArray After In-Place Byte Swapping:")
print(arr)

產生的結果如下:

Original Array:
[    1   256 65535]

Array After In-Place Byte Swapping:
[    1   256 65535]

何時使用位元組交換

在以下情況下可以使用位元組交換:

  • 互操作性 - 當在大小端不同的系統之間交換資料時,位元組交換確保正確解釋資料。
  • 資料讀取/寫入 - 當處理使用不同位元組順序的原始二進位制檔案或網路協議時,需要位元組交換才能正確讀取或寫入資料。
  • 舊系統 - 使用特定位元組順序的舊系統或檔案格式可能需要位元組交換才能正確處理資料。
廣告