我正在尝试使用以下命令:
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)
答案 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