pickle 和 savez_compressed 壓縮體積對比

ponponon發表於2022-02-17

有的時候,我們需要把一些 numpy.ndarray 物件在網路中傳輸,這個時候就要尋找一種高效的、適合網路傳輸的序列化方式:

from mark import BASE_DIR
from numpy import ndarray
import numpy
import pickle

img1 = numpy.array([i for i in range(5120)])


# 方式一: 使用 pickle 序列化 numpy.ndarray
with open(BASE_DIR/'testing'/'001.bin', 'wb') as f:
    img1: ndarray
    f.write(pickle.dumps(img1))

# --- 結果 41111 bytes

# 方法二: 使用 pickle 序列化 python 的 list 物件
with open(BASE_DIR/'testing'/'002.bin', 'wb') as f:
    ins: list[int] = img1.tolist()
    f.write(pickle.dumps(ins))

# --- 結果 15130 bytes

# 方法三: 使用 numpy 的 savez 序列化 numpy.ndarray
numpy.savez(BASE_DIR/'testing'/'numpy_savez_test', img1)

# --- 結果 41224 bytes

# 方法四: 使用 numpy 的 savez_compressed (帶壓縮功能) 序列化 numpy.ndarray
numpy.savez_compressed(BASE_DIR/'testing'/'numpy_savez_compressed_test', img1)

numpy.load(BASE_DIR/'testing'/'numpy_savez_compressed_test')

# --- 結果 7982 bytes


""" 

"""

結論

結論:
方法四 < 方法二 < 方法一 < 方法三
(7982)< (15130)< (41111)< (41224)

相關文章