Похоже, что вы хотите сделать некоторое объединение и заменить значения в определенном диапазоне на «медианное» значение этого диапазона? Ниже приведен код основного принципа. Используйте HISTC. Единственное, что вам может понадобиться изменить ниже, это «ребра», но в противном случае это должно сработать:
x = round(rand(1,1000)*1400); % Sample data
intervalSize = 10; % 5 to 15, 15 to 25 etc.
maxEdge = max(x) + intervalSize - mod(max(x), intervalSize);
edges = 0:intervalSize:max(x);
[n bin] = histc(x,edges); % Don't really need 'n'
for i = 1: (numel(edges) - 1)
midValue = mean([edges(i) edges(i+1)]);
x(bin == i) = midValue;
end
А вот еще один подход, который НЕ использует HISTC, но опирается исключительно на логическую индексацию.
%% Approach 2:
x = round(rand(1,1000)*1400); % Sample data
intervalSize = 10;
maxEdge = max(x) + intervalSize - mod(max(x), intervalSize);
edges = 0:intervalSize:max(x);
for i = 1: (numel(edges) - 1)
midValue = mean([edges(i) edges(i+1)]);
x(x >= edges(i) & x < edges(i+1)) = midValue;
end
Возможно, вам придется настроить условие логического индексирования, чтобы получить именно то, что вы хотите, но вы поняли идею.