Is there a way to initialise an array automatically inside while loop?

Hi all,
I am working on build clustering algorithm (Fixed-width)clustering. In every iteration inside while loop, some points need to be store in an array to use them in final plot. However, I do not know how can I store points that are belonge to a specific cluster in new array in every iteration. The target is showing all points with their clusters in a single plot.
Thank you

 Respuesta aceptada

Abdulatif - if you just want to add some to an array at each iteration of a loop (in your case, a while loop), then you could try the following
% initialize the cluster points array to be empty
clusterPoints = [];
while true
% do some stuff
% add (x,y) to clusterPoints
clusterPoints = [clusterPoints [x;y] ];
end
In the above, we assume that each point is 2D only. Once we break out of the while loop, clusterPoints will be a 2xm vector where m is the number of points that we have added to the array. The first row will correspond to all x's, and the second row will correspond to all y's.

5 comentarios

Hello Geoff,
The case is I want to assign a group of data points to a new array.
% f is an original dataset.
% A is an array that result from clustering function, in my case, I
have multiple arrays of (A) that I need to store them in separate
arrays to use them in a single plot.
while true
[A] = clustring(f);
% I want to store the array A in another array before move to another
iteration
end
I wish it is clear enough now!
Thank you Geoff
Hi Abdulatif - try the same above, but use a cell array to capture the the clustered data at each iteration
% initialize the cluster points array to be empty
clusterPoints = {};
atCluster = 0;
while true
% do some stuff
atCluster = atCluster + 1;
clusterPoints{atCluster} = clustring(f);
end
You could use the same concatenation as the previous example (using the []), but this is just an alternative.
Hi Geoff,
It is work. However I do not know how I can access to data and use them in plot.
clusterPoints contains: [58x3 double] [32x3 double] [1x3 double] []
How can I use them as numerical data? (Cell array concept is new to me!) : )
Thanks for corporation Geoff
If you wish to plot the data by cluster, then you could try
figure;
hold all; % use hold all to plot clusters in different colours
for k=1:length(clusterPoints)
data = clusterPoints{k};
if ~isempty(data)
plot3(data(:,1),data(:,2),data(:,3),'o');
end
end

Iniciar sesión para comentar.

Más respuestas (0)

Categorías

Community Treasure Hunt

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

Start Hunting!

Translated by