【问题标题】:free memory when working with large matrices处理大型矩阵时释放内存
【发布时间】:2016-12-31 18:21:20
【问题描述】:

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

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)

【问题讨论】:

  • 您使用的所有单个矩阵有多大?

标签: matlab memory-management


【解决方案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

【讨论】:

    猜你喜欢
    • 2012-01-30
    • 1970-01-01
    • 1970-01-01
    • 2011-03-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-07-20
    相关资源
    最近更新 更多