Effacer les filtres
Effacer les filtres

if inside of for loop

1 vue (au cours des 30 derniers jours)
Alejandro Estudillo
Alejandro Estudillo le 19 Fév 2018
Commenté : Jan le 20 Fév 2018
I don't know what is wrong with this code. The code works when I don't include the if statement. Any idea?
for i = 1:3
if rt > 100 & rt < 1000
average(i) = mean(rt(cue==i))
dev(i) = std(rt(cue==i))
end
end
  1 commentaire
the cyclist
the cyclist le 19 Fév 2018
You are leaving too much for us to guess at, which makes it difficult for us to help you.
Please describe what you mean by "doesn't work" in more detail. Does the code give an error? If so, tell us the complete error message, and which line it occurs on.
If it does not give an error, but just an unexpected result, tell us the expected and actual result.
In general, it would be better to supply code that we can actually run ourselves (e.g. by supplying the values of rt and cue.)

Connectez-vous pour commenter.

Réponse acceptée

Jan
Jan le 19 Fév 2018
Modifié(e) : Jan le 20 Fév 2018
Or perhaps:
match = (rt > 100 & rt < 1000);
rtx = rt(match);
cuex = cue(match);
for i = 1:3
average(i) = mean(rtx(cuex==i))
dev(i) = std(rtx(cuex==i))
end
Note that "if rt > 100 & rt < 1000" is evaluated as:
if all(rt > 100 & rt < 1000) && ~isempty(rt)
  2 commentaires
Alejandro Estudillo
Alejandro Estudillo le 20 Fév 2018
Modifié(e) : Alejandro Estudillo le 20 Fév 2018
I just modified some bits and works pretty well!
match = (rt > 100 & rt < 1000);
rtx = rt(match);
cuex = cue(match);
for i = 1:3
average(i) = mean(rtx(cuex==i))
dev(i) = std(rtx(cuex==i))
end
Jan
Jan le 20 Fév 2018
@Alejandro: Yes, this way a typo. Inside the loop rtx and cuex are needed. I've fixed this in my answer.

Connectez-vous pour commenter.

Plus de réponses (1)

Birdman
Birdman le 19 Fév 2018
Modifié(e) : Birdman le 19 Fév 2018
You probably forgot subscripting of rt.
for i = 1:3
if rt(i) > 100 & rt(i) < 1000
average(i) = mean(rt(cue==i))
dev(i) = std(rt(cue==i))
end
end
  2 commentaires
Alejandro Estudillo
Alejandro Estudillo le 20 Fév 2018
I tried the following code, but it only gives me a couple of values and the first one is 0.
for i = 1:3
if rt(cue==i) > 100 & rt(cue==i) < 1000
average(i) = mean(rt(cue==i))
dev(i) = std(rt(cue==i))
end
end
Birdman
Birdman le 20 Fév 2018
But again
rt(cue==i)
this will result in an array. You may perhaps do it before the loop and give it subscripted to for loop as
rt=rt(cue==i);
for i=1:3
if rt(i)...

Connectez-vous pour commenter.

Catégories

En savoir plus sur Loops and Conditional Statements dans Help Center et File Exchange

Community Treasure Hunt

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

Start Hunting!

Translated by