Use conditional statements to separate elements from a single array into 2 new arrays
3 views (last 30 days)
Show older comments
Vance Blake
on 15 Aug 2019
Commented: Vance Blake
on 28 Aug 2019
Hello, I am trying to separate elements from a matrix A (10x2) using conditional statements. I compare the distances between the all the points in A and if they are smaller than the threshold (16) then the pair of points that created that produced that result are isolated in another matrix (HS_elim). I want to use that newly created elim matrix to determine the points that wont be eliminated and instead sent to another matrix (B). I am able to isolated the points that meet my if condition but I cannot isolate the points that fail the condition. the snippet of code I am using is below. Any help would be greatly appreciated.
HS_HS_threshold = 16;
for i = 1:n
for j = 1:n
elim_dist2(i,j) = sqrt((x(i)-x(j)).^2 + (y(i)-y(j)).^2);
if (elim_dist2(i,j) ~= 0 && elim_dist2(i,j) < HS_HS_threshold)
HS_elim_x = x(j); HS_elim_y = y(j);
HS_elim(j,:) = [HS_elim_x, HS_elim_y];
elseif HS_elim(:,1) ~= x(i) && HS_elim(:,2) ~= y(i)
keep_x = x(i); keep_y = y(i);
B(i,:) = [keep_x, keep_y];
end
end
end
3 Comments
Accepted Answer
Bjorn Gustavsson
on 16 Aug 2019
Are you trying to separate points that have no neighbours closer than HS_HS_threshold from those that have?
If so this should do something like that:
elim_dist2 = nan(numel(x)); % this to have nans on the diagonal after distance calculation
HS_HS_threshold = 16;
for i = n:-1:1 % looping from largest index lets you avoid calculating the size of the elim_dist2 matrix without pying the price of dynamic growing of a matrix
for j = (i-1):-1:1 % distance symmetric (l(i1,i2) == l(i2,i1)) so calculate it once
elim_dist2(i,j) = sqrt((x(i)-x(j)).^2 + (y(i)-y(j)).^2);
elim_dist2(j,i) = elim_dist2(i,j);
end
end
% find the points that have its nearest neighbour further away than HS_HS_threshold:
i2keep = find(nanmin(elim_dist2)>HS_HS_threshold);
% put those into one pair of arrays
keep_x = x(i2keep);
keep_y = y(i2keep);
% and the others into another pair of arrays
x_close_neighbours = x;
y_close_neighbours = y;
x_close_neighbours(i2keep) = [];
y_close_neighbours(i2keep) = [];
HTH
6 Comments
More Answers (0)
See Also
Categories
Find more on Matrices and Arrays in Help Center and File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!