参考:How do I determine the size of an object in Python?

#!/usr/bin/python3.7
import sys

x = 2
sys.getsizeof(x) #24字节
sys.getsizeof(sys.getsizeof) #80
sys.getsizeof('this') #53
sys.getsizeof('this also') #58
#!/usr/bin/python3.7
import sys

sys.getsizeof([]) #72
sys.getsizeof(()) #56
sys.getsizeof({}) #248
sys.getsizeof(set()) #232
#!/usr/bin/python3.8
import sys

sys.getsizeof([]) #56
sys.getsizeof(()) #40
sys.getsizeof({}) #232
sys.getsizeof(set()) #216

numpy 数据占用内存问题

From:小谈numpy数组占用内存空间问题

问题:

[1] - 一个空的numpy数组对象占用多大空间

[2] - 一个int32int64float32float64数占用多大空间

代码:

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

结果说明,

[1] - 一个空的 numpy 数组,无论什么类型,都是占用 96 个字节(byte)

[2] - 一个 int32 和一个 float32 都是占用 4 个字节,而64位的都占用 8 个字节

: sys.getsizeof() 函数返回的是 这个对象所占用的空间大小,对于数组来说,除了数组中每个值占用空间外,数组对象还会存储数组长度、数组类型等其他信息. 而如果只想要获取数组中存储的值的占用空间大小,可以使用 numpy.ndarray.nbytes ,使用 numpy.ndarray.itemsize 获取数组中每个值的占用空间大小.

ci32.nbytes    #20
ci32.itemsize    #4
Last modification:May 24th, 2021 at 04:58 pm