2017-01-20 3 views
3

У меня есть два массива большого количества элементов, которые может хранить Matlab. Проблема возникает, когда я пытаюсь использовать функцию interp1 для интерполяции с их использованием. Существует ошибка, говорящая «Недостаточно памяти - Ошибка в interp1 (строка 122) , если таковая имеется (diff (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

В зависимости от типа интерполяции, которую вы хотите сделать (linear?), Вы можете использовать цикл. Он будет медленным, но эффективным с точки зрения памяти –

+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); 
Смежные вопросы