Find the first appearance of a number in a row.

조회 수: 33 (최근 30일)
SChow
SChow 2023년 9월 28일
댓글: Voss 2023년 9월 28일
Hi I have a matrix A from which I need to return a vector which contain the index of first occurence of a number say 2030 such that we get the matrix below
A = [0 0 0 2095 3030
0 2030 2030 2030 2030
0 0 2095 2055 2065
2065 2055 2050 2030 2030]
B=[5 2 0 4]
I tried using
for i=1:4
d=A(i,:);
targetval = 2030;
num_wanted = 2030;
xx=(find(d==targetval, num_wanted, 'first'))
end
which apparently does the job (inefficiently) , but I am confused on how to store the indices in a vector and if the value (2030) is not there in a row - then return 0.

채택된 답변

Voss
Voss 2023년 9월 28일
편집: Voss 2023년 9월 28일
A = [0 0 0 2095 2030
0 2030 2030 2030 2030
0 0 2095 2055 2065
2065 2055 2050 2030 2030]
A = 4×5
0 0 0 2095 2030 0 2030 2030 2030 2030 0 0 2095 2055 2065 2065 2055 2050 2030 2030
targetval = 2030;
n_rows = size(A,1);
B = zeros(1,n_rows); % pre-allocate vector B with a zero for each row of A.
for i = 1:n_rows
d = A(i,:);
idx = find(d==targetval, 1, 'first'); % find the first occurrence of targetval in row i.
if ~isempty(idx) % if there is one, store it as element i of B;
B(i) = idx; % (otherwise element i of B remains 0).
end
end
disp(B);
5 2 0 4
  댓글 수: 4
SChow
SChow 2023년 9월 28일
Thanks, much much appreciated.
Voss
Voss 2023년 9월 28일
You're welcome!

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

추가 답변 (0개)

카테고리

Help CenterFile Exchange에서 Matrix Indexing에 대해 자세히 알아보기

Community Treasure Hunt

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

Start Hunting!

Translated by