How to sort an array into groups with a minimum of 1 entry per group?

3 vues (au cours des 30 derniers jours)
The code shown for the following array sorts it into 3 groups. It doesn't put the first number (7300.0) into a group because it would be by itself. Is there a way to alter this code so that it makes 4 groups and allows for one of the groups to have a single entry?
m = [...
7300.0
7340.1
7340.3
7340.6
7349.0
7349.4
7358.0
7358.1
7358.2
7358.7];
% First sort m so that close by ones has adjacent indexes.
m = sort(m, 'ascend')
% Get distance of every element to every other element.
distances = pdist2(m, m)
% Find out which pairs are within 2 of each other.
within2 = distances > 0 & distances < 2
% Erase upper triangle to get rid of redundancy
numElements = numel(m);
t = logical(triu(ones(numElements, numElements), 0))
within2(t) = 0
% Label each group with an ID number.
[labeledGroups, numGroups] = bwlabel(within2)
% Put each group into a cell array
for k = 1 : numGroups
[rows, columns] = find(labeledGroups == k);
indexes = unique([rows, columns]);
groups{k} = m(indexes);
end
celldisp(groups); % Display the results in the command window.

Réponse acceptée

Kyle Reagan
Kyle Reagan le 29 Juin 2017
The solution to this is to make two new arrays, n and p that are slightly different from m. Do n = m - 0.01 and p = m + 0.01. FinalVector = sort(vertcat(m,n,p)). Now perform all the operations with FinalVector in the machine learning code. This way instead of seeing the number 7300.0 by itself as seen in the example above, it will now see
7299.99
7300.00
7300.01
and can form a group of 3 with the median at your original value.

Plus de réponses (0)

Catégories

En savoir plus sur Shifting and Sorting Matrices dans Help Center et File Exchange

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by