필터 지우기
필터 지우기

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

조회 수: 2 (최근 30일)
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.

채택된 답변

Kyle Reagan
Kyle Reagan 2017년 6월 29일
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.

추가 답변 (0개)

카테고리

Help CenterFile Exchange에서 Matrices and Arrays에 대해 자세히 알아보기

Community Treasure Hunt

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

Start Hunting!

Translated by