2016-12-31 22 views
0

我嘗試使用以下命令:可用內存

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

其中Xp(:) & Yp(:)大矩陣和正在運行到一個「內存不足」 error.I不能清除任何的工作空間中的數據,因爲這是剩餘處理所需要的。

*如何將此操作分成塊? *這是一個好方法嗎? *我有什麼其他選擇?

這是一個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

多大都是你正在使用的個人矩陣? – gnovice

回答

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