How do I find unique points in an array in a certain context?

4 次查看(过去 30 天)
Hello,
I am trying to find unique points in an array but within a unique context.
Say I have the following arrays consisting of x and y coordinates at spcific time points:
time = [ 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19]';
x_coord = [ 1 1 1 rand(1,6) 1 1 1 rand(1,5) 1 1]';
y_coord = [[ 1 1 1 rand(1,6) 1 1 1 rand(1,5) 1 1]';
mat = [x_coord y_coord];
I want to find the unique x,y coordinates so that the first value of the '1's is preserved. Specifically, the unique X/Y point indices would be:
ia = 1, 4, 5, 6, 7, 8, 9,10,13,14,15,16,17,18; (essentially preserves the 1s that occur later on in the matrix)
when using the unique() function, it removes the 1s later on in the matrix.
is there a way to find the unique points but preserve the same points that occur later in time?
  1 个评论
Walter Roberson
Walter Roberson 2023-4-28
Are you sure that you want unique() ? unique() is talking about the global situation -- so for example [x1, y1; x2, y2; x1, y1] the second x1, y1 would be considered duplicate .
It sounds to me as if it is more you are concerned whether you are in a run of duplicate values, which is a different task that can be determined with local information.

请先登录,再进行评论。

采纳的回答

Image Analyst
Image Analyst 2023-4-28
编辑:Image Analyst 2023-4-28
Try this:
time = [ 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19]';
x_coord = [ 1 1 1 rand(1,6) 1 1 1 rand(1,5) 1 1]';
y_coord = [ 1 1 1 rand(1,6) 1 1 1 rand(1,5) 1 1]';
mat = [x_coord, y_coord]
mat = 19×2
1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 0.2902 0.7648 0.9712 0.7973 0.9503 0.5313 0.5635 0.9937 0.1493 0.0628 0.1966 0.1561 1.0000 1.0000
all1rows = all(mat == 1, 2); % Find out which rows have 1 in every column.
% Throw out row if the prior row is all 1s.
% There is a vectorized way but I think you might find the for loop more intuitive.
rowsToKeep = true(numel(x_coord), 1);
for row = 2 : numel(all1rows)
if (all1rows(row) == 1) && (all1rows(row) == all1rows(row-1))
rowsToKeep(row) = false;
end
end
ia = find(rowsToKeep)'
ia = 1×14
1 4 5 6 7 8 9 10 13 14 15 16 17 18
mat = mat(rowsToKeep, :)
mat = 14×2
1.0000 1.0000 0.2902 0.7648 0.9712 0.7973 0.9503 0.5313 0.5635 0.9937 0.1493 0.0628 0.1966 0.1561 1.0000 1.0000 0.5499 0.2234 0.0796 0.7463

更多回答(0 个)

类别

Help CenterFile Exchange 中查找有关 Loops and Conditional Statements 的更多信息

产品


版本

R2021b

Community Treasure Hunt

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

Start Hunting!

Translated by