Вы можете просто индексировать дату и суммировать значения, которые будут простыми.Проблема будет в размере массива для поиска.Если оно очень большое, вы можете сделать дерево из данных, так как date
будет Node, и вы можете поместить idx в массив как значение на этом узле.Затем найдите в дереве начальную и конечную даты, что даст вам индексный диапазон в массиве для суммирования.Построить дерево и поиск легко, и есть примеры в Интернете.
x = [737421 3
737106 -1
737222 4
736084 7
726105 -2
726442 4]; % data
idx = x(:,1) >= 737421 & x(:,1) <= 737222;
out = sum(x(idx,2));
редактировать:
% Just updating to give one of the values to be correct.
% There would have to be a for loop to check every
% year range so @Luis Mendo is the best solution.
idx = x(:,1) >= 737106 & x(:,1) <= 737421; % index for each year
out = sum(x(idx,2));