使用大型矩阵时的可用内存

时间:2016-12-31 18:21:20

标签: matlab memory-management

我正在尝试使用以下命令:

X = H \ [ Xp(:) Yp(:) ones(wp*hp,1) ]';

Xp(:)& Yp(:)是大型矩阵,并且遇到“内存不足”错误。我无法清除工作区中的任何数据,因为其余的处理需要它。

*如何将此操作划分为块? *这是一个好方法吗? *我还有其他选择吗?

这是在此命令之前的memory输出:

Maximum possible array:        4005 MB (4.199e+09 bytes) *
Memory available for all arrays:        4005 MB (4.199e+09 bytes) *
Memory used by MATLAB:        1804 MB (1.891e+09 bytes)
Physical Memory (RAM):        4018 MB (4.213e+09 bytes)

1 个答案:

答案 0 :(得分:1)

这取决于内存不足发生的位置(即创建[ Xp(:) Yp(:) ones(wp*hp,1) ]或计算X)。

我建议的第一件事就是将问题分成单独的操作,

mat = [ Xp(:) Yp(:) ones(wp*hp,1) ]';
X = nan(size(H,2),size(mat,2));
for idx = 1:size(mat,2)
   X(:,idx) = H\mat(:,idx);
end

这将需要更少的内存。

如果问题的大小为mat,那么您可以尝试

%mat = [ Xp(:) Yp(:) ones(wp*hp,1) ]';
X = nan(size(H,2),numel(Xp));
for idx = 1:numel(Xp)
   X(:,idx) = H\[Xp(idx); Yp(idx); 1];
end