在matlab中避免内存不足的任何技巧?我假设它出现的原因是因为matlab在使用horzcat时非常低效,实际上需要临时复制矩阵.
我有一个A大小的矩阵108977555 x 25.我想用三个向量合并本d,m并y与大小108977555 x 1各.
我的机器有32GB内存,上面的matrice +矢量占用18GB.
现在我想运行以下命令:
A = [A(:,1:3), d, m, y, A(:,5:end)];
Run Code Online (Sandbox Code Playgroud)
但这会产生错误:
Error using horzcat
Out of memory. Type HELP MEMORY for your options.
Run Code Online (Sandbox Code Playgroud)
合并的任何技巧?
使用大型数据集.如果您正在处理大型数据集,则在增加数组大小时需要小心,以避免因内存不足而导致错误.如果将数组扩展到其原始位置的可用连续内存之外,MATLAB必须复制该数组并将此副本设置为新值.在此操作期间,内存中有两个原始数组副本.
重新启动matlab,我经常发现它没有完全清理它的内存或者它的碎片,导致最小的数组大小.
更改您的数据类型(如果可以).例如,如果你只处理数字0 - 255,使用uint8,与s 数组相比,内存大小将减少8倍double
A已经足够大的开始(即108977555x27代替108977555x25并插入到位:
A(:, 4) = d;
clear d
A(:, 5) = m;
clear m
A(:, 6) = y;
Run Code Online (Sandbox Code Playgroud)合并一种数据类型的数据以减少总内存需求,例如日期很容易合适uint32.
保持数据分离,首先想一想为什么要将数据放在一个矩阵中,如果真的有必要的话.
使用C代码自己进行数据分配(只有当你真的绝望时)
进一步阅读:https://nl.mathworks.com/help/matlab/matlab_prog/memory-allocation.html