gpt4 book ai didi

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

转载 作者:太空宇宙 更新时间:2023-11-03 19:44:09 28 4
gpt4 key购买 nike

我正在将一个相当大的矩阵加载到 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/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com