Trying to index an array and extract its values with a for loop.
35 次查看(过去 30 天)
显示 更早的评论
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
0 个评论
采纳的回答
Cris LaPierre
2022-1-11
编辑:Cris LaPierre
2022-1-11
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 个)
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((t.column1==0),:)=[];
t((t.column2==0),:)=[];
t((t.column3==0),:)=[];
t((t.column1==1),:)=[];
t((t.column2==1),:)=[];
t((t.column3==1),:)=[];
t
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]'
index = (sum((t~=1).*(t~=0),2)==3)
t(index,:)
1 个评论
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 Exchange 中查找有关 Loops and Conditional Statements 的更多信息
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!