Find the first appearance of a number in a row.

26 vues (au cours des 30 derniers jours)
SChow
SChow le 28 Sep 2023
Commenté : Voss le 28 Sep 2023
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.

Réponse acceptée

Voss
Voss le 28 Sep 2023
Modifié(e) : Voss le 28 Sep 2023
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 commentaires
SChow
SChow le 28 Sep 2023
Thanks, much much appreciated.
Voss
Voss le 28 Sep 2023
You're welcome!

Connectez-vous pour commenter.

Plus de réponses (0)

Catégories

En savoir plus sur Matrices and Arrays dans Help Center et File Exchange

Community Treasure Hunt

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

Start Hunting!

Translated by