Find the first appearance of a number in a row.
33 views (last 30 days)
Show older comments
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.
0 Comments
Accepted Answer
Voss
on 28 Sep 2023
Edited: Voss
on 28 Sep 2023
A = [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);
4 Comments
More Answers (0)
See Also
Categories
Find more on Matrix Indexing 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!