Numpy 如何创建大型np.Zero矩阵?

Numpy 如何创建大型np.Zero矩阵?,numpy,memory-management,out-of-memory,google-colaboratory,Numpy,Memory Management,Out Of Memory,Google Colaboratory,当我试图在Colab中创建一个带有12GB RAM的numpy矩阵时,我看到内存错误: A = np.zeros((644253, 50, 259)) 如何修复此问题?默认类型为np.float64,即8字节。GB大小为644253*50*259*8/1024**3=62.16GB。内存不足,无法创建这样的矩阵。如果您真的需要它,可以添加大量的交换内存,但与RAM相比速度会非常慢(可能慢几个数量级)。您也可以尝试A=np.zeros((644253,50259),type=np.float32

当我试图在Colab中创建一个带有12GB RAM的numpy矩阵时,我看到内存错误:

A = np.zeros((644253, 50, 259))

如何修复此问题?

默认类型为np.float64,即8字节。GB大小为644253*50*259*8/1024**3=62.16GB。内存不足,无法创建这样的矩阵。如果您真的需要它,可以添加大量的交换内存,但与RAM相比速度会非常慢(可能慢几个数量级)。您也可以尝试
A=np.zeros((644253,50259),type=np.float32)
A=np.zeros((644253,50259),type=np.int8)
或任何您需要的类型。这样可以节省内存

这需要大约8GB的内存(
644253*50*259/1000/1024/1024
)。您是否也在运行其他进程?默认类型是float64,因此每个元素有8个字节@kmario23如果矩阵是稀疏的,您可能需要查看一下。@MarkSetchell啊,是的,我忘了乘以该因子<代码>8*644253*50*259/1024/1024/1024=
62.16076277196407
GB。感谢您指出:)如果您的矩阵是稀疏的,一种可能的替代方法是使用
scipy.sparse
。请注意,
scipy.sparse
仅支持2d矩阵,因此需要一些技巧来处理3d阵列(例如,重塑阵列)。这取决于你想做什么。谢谢。它在普通的macbook上工作:。怎么可能呢?矩阵中的值超过32k,int8太小。你确定这个问题没有解决办法吗?也许你的Colab东西没有你的MacBook那么大的交换空间……我相信
np.memmap
会自动用零填充。因此,您也可以使用
np.memmap('myTempFile.bin','uint32','w+',0,(644253,50259))
。32k是
int16
。如果max小于64K,请考虑<代码> UTI1616/CODE >