How to remove the first element and last element based on First column

11 次查看(过去 30 天)
I have a matrix 23 by 2 matrix. and it looks as below.
First Column starts from 1 to 5 and second column is the value.
I would like to removes the beginning(i.e the first element) and removes the end(i.e the last element) based on first column.
For example, for 1 from first column, I hope to remove first element [1,293] and last element [1,348]
and for 2 from first column, I hope to remove first element [2,237] and last element [2,326]
and for 3 from first column, I hope to remove first element [3,186] and last element [3,327]
until for 5 from first column.
Is there a way for it?
x1 = [1,293;...
1,274;...
1,329;...
1,348;...
2,237;...
2,374;...
2,326;...
3,186;...
3,237;...
3,274;...
3,327;...
4,186;...
4,235;...
4,274;...
4,326;...
4,359;...
5,161;...
5,164;...
5,186;...
5,235;...
5,274;...
5,326;...
5,358];

采纳的回答

Voss
Voss 2022-4-29
Here's one way
x1 = [1,293;...
1,274;...
1,329;...
1,348;...
2,237;...
2,374;...
2,326;...
3,186;...
3,237;...
3,274;...
3,327;...
4,186;...
4,235;...
4,274;...
4,326;...
4,359;...
5,161;...
5,164;...
5,186;...
5,235;...
5,274;...
5,326;...
5,358];
idx = find(diff(x1(:,1))) % indexes where the first column of x1 changes
idx = 4×1
4 7 11 16
idx = idx+[0 1] % those indexes and the one after
idx = 4×2
4 5 7 8 11 12 16 17
idx = [idx(:); 1; size(x1,1)] % include the first and last rows of x1
idx = 10×1
4 7 11 16 5 8 12 17 1 23
x1(idx,:) = []; % remove those rows
disp(x1);
1 274 1 329 2 374 3 237 3 274 4 235 4 274 4 326 5 164 5 186 5 235 5 274 5 326

更多回答(1 个)

dpb
dpb 2022-4-29
编辑:dpb 2022-4-29
Of course there is. :)
But, specifically how to do so is dependent on answer to several other questions regarding what is really wanted.
First, how were the elements above determined to want to be removed? The best way to do something of this sort is to have an algorithm that determines which values are those in Q? and thus avoid having to make up lists of specific hard-coded values.
Secondly, however those values are determined, are there
  1. Possibility of more than one element of same value, and
  2. Are the values exactly those to machine precision (testing for equality with floating point values is an iffy proposition)
  3. Is there a need to remove these in pairs as given and do something else with the remainder before moving on to the next pair or can they all just be deleted in "one swell foop!"
?
With answers to those questions, there's at least enough to begin to posit an answer...

类别

Help CenterFile Exchange 中查找有关 Logical 的更多信息

标签

产品


版本

R2021a

Community Treasure Hunt

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

Start Hunting!

Translated by