2017-01-20 82 views
3

我有兩個matlab可以存儲大量元素的數組。當我嘗試使用函數interp1插入使用它們時,問題就出現了。有一個錯誤說:「內存不足 - 錯誤interp1(行122) 如果有(差異(X)< 0)」 我有什麼選擇?使用interp1時內存不足。 Matlab

time; % Vector, length(time)=91542016 
    Results; % Vector with the results for each time step, length(Results)=91542016 
    A=1:1:(10^7); %Vector of positions in which I want to interpolate 
    E=interp1(time,Results,A,'previous'); %Vector in which I want to store the interpolation 
+2

你能告訴我們,您所使用的代碼? – Suever

+1

根據您想要執行的插值類型(線性?),您可能可以使用循環。這將是緩慢的,但內存效率 –

+1

我想要「先前」類型插值 – Fisiquin

回答

2

嘗試轉換您的陣列從'double''single'。那麼你將使用一半的內存。

+0

如果我這樣做,我會得到下一個錯誤「使用griddedInterpolant錯誤。網格向量不嚴格單調遞增」 – Fisiquin

0

這裏是一個矢量版本:

n = numel(time); 
%concatenate time and A and find index of sorted elements 
[~, idx] = sort([time A]); 
%n (variable length) categories created , 
%each element of time form a category 
category = cumsum(idx <= n); 
%determine which categories elements of A belong to 
idx_Results = category(idx > n); 
out = Results(idx_Results);