Partitioning and removing an array of data

2 views (last 30 days)
Ronak
Ronak on 27 Oct 2021
Answered: Ishu on 27 Mar 2024
Hi. Can you please explain what is it doing here (Bold lines)? As far as I know it must remove gridpoints from thegrid and partitions gridpoints with a probability (prob). But I don't understand how it is doing the removing and patirioning.
for j=1:L
gridpoints=[gridpoints,thegrid{j}.coordinate];
npoints=length(thegrid{j}.points);
directions_numeric=sign(X_data(:,thegrid{j}.points)-thegrid{j}.coordinate*ones(1,npoints));
directions=num2cell(num2str(directions_numeric'),2);
numericmap=containers.Map(directions,num2cell(directions_numeric,1));
cubemap=containers.Map(directions,cell(npoints,1));
for i=1:npoints
cubemap(directions{i})=[cubemap(directions{i}),i];
end;
keyset=keys(cubemap);
valset=values(cubemap);
for i=1:length(cubemap)
activesize=length(valset{i});
if(activesize>gamma)
prob=1-0.5*exp(-epss*(activesize-gamma));
else
prob=0.5*exp(epss*(activesize-gamma));
end;
if(random('bino',1,prob)>0.5)
tempobj.coordinate=thegrid{j}.coordinate+side_length/2*numericmap(keyset{i});
tempobj.points=valset{i};
newgrid=[newgrid,tempobj];
end;
end;

Answers (1)

Ishu
Ishu on 27 Mar 2024
Hi Ronak,
Here you are dealing with a struct "thegrid{1}" which has two fields "coordinate" and "points". In the loop you are iterating over a list of grid cells "thegrid' of lenght "L".
For each cell it extracts the cell's central coordinate and the indices of data points associated with this cell. Then it calculates the direction of each point relative to the cell's center, storing it in a matrix "directions_numeric" where each column represents the direction of a point relative to the center.
Next, the code converts the numeric directions to strings "directions" and then to cell arrays, which are used as keys in two maps "numericmap" and "cubemap". The "numericmap" associates each direction with its numeric representation. The "cubemap" is intended to group points by their direction relative to the cell's center.
In last, it iterates over all points, appending the index of each point to the appropriate entry in "cubemap" based on its direction.
For more information on how the data is stores in "structs" you can refer below documentation:
Hope it helps.

Categories

Find more on MATLAB in Help Center and File Exchange

Tags

Community Treasure Hunt

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

Start Hunting!