Python的内存管理相对于C++来说相当低效已经是老生之谈了。今天遇到了一个内存问题,大概是我想拿 30000 × 512 30000\times{512} 30000×512的一个矩阵来和它自己的转秩做类似内积的运算。在Python中查看一个变量占多少内存的指令如下:
import numpy as np
from sys import getsizeof
a = [0] * 1024
b = np.array(a)
getsizeof(a)
b.nbytes
查看内积运算的结果可以看到,对于这个维度是
32606
×
32606
32606\times{32606}
32606×32606类型为float32
的矩阵占用的内存大小是4055.6MB。可以说基本是没有办法执行其他操作的。更细节的来看,一个float32
类型的数字所占用的内存是4B,
32606
×
32606
×
4
32606\times{32606}\times{4}
32606×32606×4的结果是3.96GB,问题似乎主要还是出在这个矩阵的维度过大。