【Python】小談 numpy 陣列佔用記憶體空間問題
阿新 • • 發佈:2019-02-02
之前跟同學討論過numpy
陣列的佔用空間大小問題,但是今天給忘了,又重新試驗了一下,主要是利用sys
模組的getsizeof
函式,使用的版本是 Python3.5。記錄下來,以備後忘。
問題
- 一個空的
numpy
陣列物件佔用多大空間。 - 一個
int32
、int64
、float32
、float64
數佔用多大空間。
程式碼
import numpy as np
import sys
# 32位整型
ai32 = np.array([], dtype=np.int32)
bi32 = np.arange(1, dtype=np.int32)
ci32 = np.arange(5 , dtype=np.int32)
# 64位整型
ai64 = np.array([], dtype=np.int64)
bi64 = np.arange(1, dtype=np.int64)
ci64 = np.arange(5, dtype=np.int64)
# 32位浮點數
af32 = np.array([], dtype=np.float32)
bf32 = np.arange(1, dtype=np.float32)
cf32 = np.arange(5, dtype=np.float32)
# 64位浮點數
af64 = np.array([], dtype=np.float64)
bf64 = np.arange(1 , dtype=np.float64)
cf64 = np.arange(5, dtype=np.float64)
print("size of 0 int32 number: %f" % sys.getsizeof(ai32))
print("size of 1 int32 number: %f" % sys.getsizeof(bi32))
print("size of 5 int32 numbers: %f" % sys.getsizeof(ci32), end='\n\n')
print("size of 0 int64 number: %f" % sys.getsizeof(ai64))
print("size of 1 int64 number: %f" % sys.getsizeof(bi64))
print("size of 5 int64 numbers: %f" % sys.getsizeof(ci64), end='\n\n')
print("size of 0 float32 number: %f" % sys.getsizeof(af32))
print("size of 1 float32 number: %f" % sys.getsizeof(bf32))
print("size of 5 float32 numbers: %f" % sys.getsizeof(cf32), end='\n\n')
print("size of 0 float64 number: %f" % sys.getsizeof(af64))
print("size of 1 float64 number: %f" % sys.getsizeof(bf64))
print("size of 5 float64 numbers: %f" % sys.getsizeof(cf64))
結果
size of 0 int32 number: 96.000000
size of 1 int32 number: 100.000000
size of 5 int32 numbers: 116.000000
size of 0 int64 number: 96.000000
size of 1 int64 number: 104.000000
size of 5 int64 numbers: 136.000000
size of 0 float32 number: 96.000000
size of 1 float32 number: 100.000000
size of 5 float32 numbers: 116.000000
size of 0 float64 number: 96.000000
size of 1 float64 number: 104.000000
size of 5 float64 numbers: 136.000000
以上結果說明:
- 一個空的
numpy
陣列,無論什麼型別,都是佔用 96 個位元組(byte)。 - 一個
int32
和一個float32
都是佔用 4 個位元組,而64位的都佔用 8 個位元組。
其他型別佔用空間大小可以採用類似程式碼進行測試。
此外,注意 sys.getsizeof()
函式返回的是 這個物件所佔用的空間大小,對於陣列來說,除了陣列中每個值佔用空間外,陣列物件還會儲存陣列長度、陣列型別等其他資訊。而如果只想要獲取陣列中儲存的值的佔用空間大小,可以使用 numpy.ndarray.nbytes
,使用 numpy.ndarray.itemsize
獲取陣列中每個值的佔用空間大小。
ci32.nbytes # 20
ci32.itemsize # 4