2017-01-20 4 views
3

私はmatlabが格納できる多数の要素の2つの配列を持っています。問題は、関数interp1を使用して補間するときに発生します。 「out of memory - interp1のエラー(122行目) (diff(X)<)」というエラーが表示される オプションは何ですか?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

'single''double'からあなたの配列を変換してみます。次に、半分のメモリを使用します。ここで

+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); 
関連する問題