Trying to index an array and extract its values with a for loop.

38 ビュー (過去 30 日間)
Raven Buckman
Raven Buckman 2022 年 1 月 11 日
コメント済み: Ive J 2022 年 1 月 11 日
I have an table of probabilities and I want to index the table to determine if there is a probability in any of the three columns that is not 1 or 0, extract the row and put it into a new array. I'm fairly new to working with matlab so I'm sure there is a very simple way to do this but it is evading me. Any help would be great.
i = 1;
for scrs(i,:) ~= 1 || scrs(i,:) ~= 0
unclassifiable = scrs(i,:);
i = i+1;
disp('Unclassifiable nanoparticles detected.')
end

採用された回答

Cris LaPierre
Cris LaPierre 2022 年 1 月 11 日
編集済み: Cris LaPierre 2022 年 1 月 11 日
See MATLAB Onramp Ch 5: Indexing and Modifying Arrays.
You might also find Ch 12: Programming helpful since it covers for loops.
For loops start with a declaration of a counter, which is automatically incremented each loop, and repeats a fixed number of times. Note that this approach assumes scrs only has 1 column of data. If that is not true, you will need to modify this approach.
for i = 1:size(scrs,2)
if scrs(i,:) ~= 1 || scrs(i,:) ~= 0
unclassifiable(i,:) = scrs(i,:);
disp('Unclassifiable nanoparticles detected.')
end
end
What you have written looks more like a while loop to me, which continue to loop as long as the conditional expression is true. However, this stops looping the first time scrs is 1 or 0. Note that this approach assumes scrs only has 1 column of data. If that is not true, you will need to modify this approach.
i = 1;
while scrs(i,:) ~= 1 || scrs(i,:) ~= 0
unclassifiable(i,:) = scrs(i,:);
i = i+1;
disp('Unclassifiable nanoparticles detected.')
end
Not sure which one you want so try them both to understand the difference.
  1 件のコメント
Raven Buckman
Raven Buckman 2022 年 1 月 11 日
Thanks so much. I want it to keep looping throughout the entire matrix so this is quite helpful. Thank you.

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

その他の回答 (1 件)

Kevin Holly
Kevin Holly 2022 年 1 月 11 日
Below are two possible ways.
If data is in table,
t=table;
t.column1 = [1 2 3 4 0 3 4 2 3 4 0 3 1]';
t.column2 = [8 7 9 0 3 9 2 1 2 3 1 0 3]';
t.column3 = [9 0 9 7 2 1 8 3 9 2 3 0 1]';
t
t = 13×3 table
column1 column2 column3 _______ _______ _______ 1 8 9 2 7 0 3 9 9 4 0 7 0 3 2 3 9 1 4 2 8 2 1 3 3 2 9 4 3 2 0 1 3 3 0 0 1 3 1
t((t.column1==0),:)=[];
t((t.column2==0),:)=[];
t((t.column3==0),:)=[];
t((t.column1==1),:)=[];
t((t.column2==1),:)=[];
t((t.column3==1),:)=[];
t
t = 4×3 table
column1 column2 column3 _______ _______ _______ 3 9 9 4 2 8 3 2 9 4 3 2
If data is in matrix,
t = [1 2 3 4 0 3 4 2 3 4 0 3 1;8 7 9 0 3 9 2 1 2 3 1 0 3;9 0 9 7 2 1 8 3 9 2 3 0 1]'
t = 13×3
1 8 9 2 7 0 3 9 9 4 0 7 0 3 2 3 9 1 4 2 8 2 1 3 3 2 9 4 3 2
index = (sum((t~=1).*(t~=0),2)==3)
index = 13×1 logical array
0 0 1 0 0 0 1 0 1 1
t(index,:)
ans = 4×3
3 9 9 4 2 8 3 2 9 4 3 2
  1 件のコメント
Ive J
Ive J 2022 年 1 月 11 日
The second approach is not efficient; this is way faster:
index = all(t ~= 0 & t ~= 1, 2);

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

カテゴリ

Help Center および File ExchangeLoops and Conditional Statements についてさらに検索

製品


リリース

R2021b

Community Treasure Hunt

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

Start Hunting!

Translated by