Effacer les filtres
Effacer les filtres

Loop over an array

3 vues (au cours des 30 derniers jours)
Alessandro Ruda
Alessandro Ruda le 21 Fév 2022
Modifié(e) : Jan le 22 Fév 2022
Dear MatLab comunity,
I have a problem with a for loop.
I have two arrays of angles Theta1 and Theta2 (attached).
I have defined the following:
rTheta1 = load('theta1.dat');
rTheta2 = load('theta2.dat');
Theta1 = Theta1(:,2); %% which are the Theta1 angles
Theta2 = Theta2(:,2); %% // Theta2 angles
Theta1_cis = Theta1((Theta1 > -90) & (Theta1 < 90)); % Array of values when theta1 is in Cis
Theta1_trans = Theta1(Theta1 > 90 | Theta1 < -90); % Array of values when theta1 is in Trans
What I need now is to define an array such that when Theta1 is whitin the cis range then I collect the value in the variable Theta2_T1cis otherwise it goes in Theta2_T1trans, or when Theta1 is in the trans range then it goes in Theta2_T1trans.
I tried to put up a loop but I am very nabish so please help me on this:
i = 1;
for i = 1:[Theta1]
if Theta1((Theta1 > -90) & (Theta1 < 90))
Theta2_T1cis(i) = Theta2(i)
else Theta2_trans(i) = Theta2(i)
i= i+1;
end
end
this is not working of course. How can I solve it?
Hope the question is clear, otherwise I will reformulate.
Thanks in advance,
Alessandro

Réponse acceptée

Jan
Jan le 21 Fév 2022
Modifié(e) : Jan le 21 Fév 2022
There is no need for a loop:
T1_cis_index = (Theta1 > -90) & (Theta1 < 90);
T1_trans_index = (Theta1 > 90) | (Theta1 < -90);
Theta1_cis = Theta1(T1_cis_index);
Theta1_trans = Theta1(T1_trans_index);
Theta2_T1cis = Theta2(T1_cis_index);
Theta2_T1trans = Theta2(T1_trans_index);
By the way, this is no the way loops are working. A cleaner version:
% i = 1; Nope
for i = 1:numel(Theta1) % Not: [Theta1]
if (Theta1(i) > -90) & (Theta1(i) < 90)) % Use Theta1(i), not the complete vector
Theta2_T1cis(i) = Theta2(i)
else
Theta2_trans(i) = Theta2(i)
% Nope: i= i+1;
end
end
  3 commentaires
Alessandro Ruda
Alessandro Ruda le 21 Fév 2022
Modifié(e) : Alessandro Ruda le 21 Fév 2022
Ok, it actually works. But I had to change it this way to obtain what I wanted specifically.
for i = 1:numel(Theta1)
if ((Theta1(i) > -90) & (Theta1(i) < 90))
Theta2_T1cis_raw(i) = Theta2(i);
else
Theta2_T1trans_raw(i) = Theta2(i);
end
end
tTheta2_T1cis = Theta2_T1cis_raw(Theta2_T1cis_raw~=0);
Theta2_T1cis = transpose(tTheta2_T1cis);
tTheta2_T1trans = Theta2_T1trans_raw(Theta2_T1trans_raw~=0);
Theta2_T1trans = transpose(tTheta2_T1trans);
I don't know if it can be made cleaner!
Thank you anyway!
Jan
Jan le 22 Fév 2022
Modifié(e) : Jan le 22 Fév 2022
The loop is not needed. A shorter, leaner and faster solution:
match = (Theta1 > -90) & (Theta1 < 90);
Theta2_T1cis = Theta2(match);
tTheta2_T1trans = Theta2(~match);

Connectez-vous pour commenter.

Plus de réponses (0)

Catégories

En savoir plus sur Multidimensional Arrays dans Help Center et File Exchange

Produits


Version

R2020b

Community Treasure Hunt

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

Start Hunting!

Translated by