필터 지우기
필터 지우기

how to find the elements in a matrix that follow a certain pattern

조회 수: 2 (최근 30일)
Dear All,
I have been working on writing a code to get what I want and have not been luck yet. I hope you can help me to do so so that I can move on with my research. Any help will be appreciated.
I do have a column that has the following format in general:
[0;
0; % a number of zeros
.
.
5 %please note that the non-zero elements are essentially the row numbers i.e. the fifth element is 5 and so on.
6
7
8
0 % again a set of zeros
0
0
12
13
0
0]
what I want is to write a code that gives me the first and last element of each non-zero interval. for the example above my desired out put would be a matrix of 2*2 as
[5 8
12 13] % the first and second columns would be including the first and last non zero elements of each interval, respectively.
Thank you so much for your helps. I have been kind of stuck!

채택된 답변

Star Strider
Star Strider 2016년 6월 25일
This seems to work in the data you presented:
v = [0;
0;
0
5
6
7
8
0
0
0
12
13
0
0];
nzi = diff([0; v]);
nzigt0 = find(nzi > 1);
nzilt0 = find(nzi < 0);
Output = [v(nzigt0) v(nzilt0-1)]
Output =
5 8
12 13
  댓글 수: 4
Homayoon
Homayoon 2016년 6월 25일
yes and as I said, my friend your answer perfectly resolves my issue. Thanks for the time you devoted on helping me.

댓글을 달려면 로그인하십시오.

추가 답변 (2개)

Andrei Bobrov
Andrei Bobrov 2016년 6월 25일
편집: Andrei Bobrov 2016년 6월 25일
v =[0
0
0
5
6
7
8
0
0
0
12
13
0
0];
z = [[0;v(1:end-1)],v];
out = z([0;diff(all(z,2))]==1,:);

Walter Roberson
Walter Roberson 2016년 6월 25일
mask = logical(YourVector(:));
run_start = strfind([false; mask], [0; 1]);
run_end = strfind([mask; false], [1; 0]);
desired_matrix = [run_start(:), run_end(:)];
  댓글 수: 3
Homayoon
Homayoon 2016년 6월 25일
Error using strfind Input strings must have one row.
run_start = strfind([false; mask], [0; 1])
Walter Roberson
Walter Roberson 2016년 6월 25일
mask = logical(YourVector(:)).';
run_start = strfind([false, mask], [0, 1]);
run_end = strfind([mask, false], [1, 0]);
desired_matrix = [run_start(:), run_end(:)];

댓글을 달려면 로그인하십시오.

카테고리

Help CenterFile Exchange에서 Directed Graphs에 대해 자세히 알아보기

Community Treasure Hunt

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

Start Hunting!

Translated by