Effacer les filtres
Effacer les filtres

Writing a find function

1 vue (au cours des 30 derniers jours)
Nicholas Deosaran
Nicholas Deosaran le 13 Oct 2020
Commenté : Stephen23 le 13 Oct 2020
Hello all,
I am trying to run a function that will use the "find" function to separate grades
i have my code below, but I dont know what I seem to be doing wrong.
function [out_orig, out_new] = parse_grades
scores = 100*rand(50,1);
ind1 = find(scores >= 90); %A
ind2 = find(scores <= 80) && ( scores < 90 ); % B
ind3 = find(scores <=70) && (scores < 80); % C
ind4 = find(scores <= 60) && ( scores <70); % D
ind5 = find (scores <60); % f
vec_new(ind1) = 'A';
vec_new(ind2) = 'B' ;
vec_new(ind3) = 'C' ;
vec_new(ind4) = 'D' ;
vec_new(ind5) = 'F';
out_orig = scores;
out_new = vec_new ;
end
the error I am getting is
Operands to the || and && operators must be convertible to logical scalar values.
Error in parse_grades (line 6)
ind2 = find(scores <= 80) && ( scores < 90 ); % B
  4 commentaires
Ruger28
Ruger28 le 13 Oct 2020
Modifié(e) : Ruger28 le 13 Oct 2020
I think you meant to say:
vec_new(ind1) = 'A';
vec_new(ind2) = 'B';
vec_new(ind3) = 'C';
vec_new(ind4) = 'D';
vec_new(ind5) = 'F';
not saying this will solve your problems, though.
Nicholas Deosaran
Nicholas Deosaran le 13 Oct 2020
Hey, thank you for that.
The problem I was having which I should of stated above is:
Operands to the || and && operators must be convertible to logical scalar values.
Error in parse_grades (line 6)
ind2 = (scores <= 80) && ( scores < 90 ); % B

Connectez-vous pour commenter.

Réponses (1)

KSSV
KSSV le 13 Oct 2020
Modifié(e) : KSSV le 13 Oct 2020
You can proceed something like htis:
score = randperm(100,1)
if score >=90
grade = 'A' ;
elseif (score >= 80) & (score < 90 )
grade = 'B' ;
elseif (score >= 70) & (score < 80)
grade = 'C' ;
elseif (score >= 60) & (score < 70 )
grade = 'D' ;
else
grade = 'E' ;
end
grade
If you want score to be a vector, proceed like this:
score = randperm(100,10) ;
idx = zeros(size(score)) ;
idx(score >= 90) = 1 ;
idx(score >= 80 & score < 90) = 2 ;
idx(score >= 70 & score < 80) = 3 ;
idx(score >= 60 & score < 70) = 4 ;
idx(idx==0) = 5 ;
grade = {'A', 'B', 'C', 'D', 'E'} ;
iwant = grade(idx)
  6 commentaires
Nicholas Deosaran
Nicholas Deosaran le 13 Oct 2020
is the idx1 --- > idx= zeros(size(score)); ??
Stephen23
Stephen23 le 13 Oct 2020
"Can it be used it find?"
Using find is less efficient than the simple logical indexing that KSSV's answer shows.

Connectez-vous pour commenter.

Community Treasure Hunt

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

Start Hunting!

Translated by