Matlab Horzcat - 内存不足

phd*_*ent 2 memory matlab

在matlab中避免内存不足的任何技巧?我假设它出现的原因是因为matlab在使用horzcat时非常低效,实际上需要临时复制矩阵.

我有一个A大小的矩阵108977555 x 25.我想用三个向量合并本d,my与大小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)

合并的任何技巧?

Gun*_*uyf 5

使用大型数据集.如果您正在处理大型数据集,则在增加数组大小时需要小心,以避免因内存不足而导致错误.如果将数组扩展到其原始位置的可用连续内存之外,MATLAB必须复制该数组并将此副本设置为新值.在此操作期间,内存中有两个原始数组副本.

  1. 重新启动matlab,我经常发现它没有完全清理它的内存或者它的碎片,导致最小的数组大小.

  2. 更改您的数据类型(如果可以).例如,如果你只处理数字0 - 255,使用uint8,与s 数组相比,内存大小减少8倍double

  3. A已经足够大的开始(即108977555x27代替108977555x25并插入到位:

    A(:, 4) = d;
    clear d
    A(:, 5) = m;
    clear m
    A(:, 6) = y;
    
    Run Code Online (Sandbox Code Playgroud)
  4. 合并一种数据类型的数据以减少总内存需求,例如日期很容易合适uint32.

  5. 保持数据分离,首先想一想为什么要将数据放在一个矩阵中,如果真的有必要的话.

  6. 使用C代码自己进行数据分配(只有当你真的绝望时)

进一步阅读:https://nl.mathworks.com/help/matlab/matlab_prog/memory-allocation.html