matlab - Matlab 内存不足 - 如何对矩阵元素进行就地运算?

标签 matlab matrix out-of-memory in-place

我正在将一个相当大的矩阵加载到 Matlab 中。加载此矩阵已经将 Matlab 推向了极限 - 但它适合。

然后我执行以下操作,但出现内存不足错误。

data(:, 2:2:end, :, :) = - data(:, 2:2:end, :, :);

Matlab 是否为此操作分配了一个新矩阵?我会假设这个操作不需要额外的内存。我如何强制 Matlab 对此更有效率?

奖励问题:

'data = permute(data,[1 2 3 4 5 12 8 7 6 9 10 11]);'

matlab 可以就地执行此操作吗?

最佳答案

有一些限制条件(除了 John 引用的 Loren 的限制之外):

  • 您的代码必须在函数内运行
  • 您不能有“数据”的其他别名

“别名”的事情既重要又可能很难正确处理。 MATLAB 使用写时复制,这意味着当您调用函数时,您传递的参数不会立即复制,但如果您在函数内修改它可能会被复制。例如,考虑

x = rand(100);
y = myfcn(x);
% with myfcn.m containing:
function out = myfcn(in)
  in(1) = 3;
  out = in * 2;
end

在那种情况下,变量x 被传递给myfcn。 MATLAB 具有值语义,因此在调用工作区中不得看到对输入参数 in 的任何修改。因此,myfcn 的第一行导致参数 in 成为 x副本,而不是简单的一个别名。考虑一下 try/catch 会发生什么 - 这可能是就地 killer ,因为 MATLAB 必须能够在您出错时保留值。在以下内容中:

% consider this function
function myouterfcn()
  x = rand(100);
  x = myfcn(x);
end
% with myfcn.m containing
function arg = myfcn( arg )
  arg = -arg;
end

然后,应该myouterfcn 中对 x 进行就地优化。但以下不能:

% consider this function
function myouterfcn()
  x = rand(100);
  x = myfcn(x);
end
% with myfcn.m containing
function arg = myfcn( arg )
  try
    arg = -arg;
  catch E
    disp( 'Oops.' );
  end
end

希望这些信息中的一些对...有帮助...

关于matlab - Matlab 内存不足 - 如何对矩阵元素进行就地运算?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8400475/

相关文章:

matlab - Matlab 中的多行匿名函数?

matlab - 在 Matlab 的 for 循环中为子图创建注释框

image - 将大矩阵中的 int32 分解为 int8

java - Spring Boot 应用程序 - java.lang.OutOfMemoryError : GC overhead limit exceeded 问题

matlab - 如何在没有循环的情况下构建距离矩阵(矢量化)?

matlab - 如何在 MATLAB 调试中跳过内置函数?

android - 内存异常会导致 NullPointerException 吗?

.net - 即使应用似乎没有占用最大内存量,也会发生OutOfMemoryException

excel - 如何将一些矩阵写入/导出到 XLS 文件?

c - c 中的矩阵和对角线任务