フィルターのクリア

Loop over an array

3 ビュー (過去 30 日間)
Alessandro Ruda
Alessandro Ruda 2022 年 2 月 21 日
編集済み: Jan 2022 年 2 月 22 日
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

採用された回答

Jan
Jan 2022 年 2 月 21 日
編集済み: Jan 2022 年 2 月 21 日
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 件のコメント
Alessandro Ruda
Alessandro Ruda 2022 年 2 月 21 日
編集済み: Alessandro Ruda 2022 年 2 月 21 日
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 2022 年 2 月 22 日
編集済み: Jan 2022 年 2 月 22 日
The loop is not needed. A shorter, leaner and faster solution:
match = (Theta1 > -90) & (Theta1 < 90);
Theta2_T1cis = Theta2(match);
tTheta2_T1trans = Theta2(~match);

サインインしてコメントする。

その他の回答 (0 件)

カテゴリ

Help Center および File ExchangeMultidimensional Arrays についてさらに検索

タグ

製品


リリース

R2020b

Community Treasure Hunt

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

Start Hunting!

Translated by