MATLAB: Clustering nearest 5 elements of a data

clustering

I have 36 points I need to find the nearest 5 elements of each point and cluster it in a group. Then there is a total of 36 clusters will get. The points are in the 'core' and I need to find the nearest elements from the 'data'. How can I do that? Please help me.
clc;
clear;
data=xlsread('Pimaxl.xlsx');
Si=size(data);
asc=sort(data);
num = numel(data);
diff=unique(asc);
core1=maxk(diff,12);
core2=mink(diff,12);
n = numel(diff(:));
midpoint = ceil(n/2);
core3 = diff(midpoint-5:midpoint+6);
cor=[core1 core2];
core=[cor core3];

Best Answer

You could do the following which is to find the 5 minimum absolute differences for each element in core.
[~,idx] = mink(abs(data(:)-core(:).'),5,1);
clusters = data(idx)
Here, the input array to mink is 6912 by 36 where each row corresponds to an element in data and each column corresponds to an element in core and contains every possible absolute difference. The mink function returns an index that you can then sub directly back into data to get your clusters. Clusters is 5 by 36 with each column corresponding to the 36 values in core.