How to keep an element fixed until it fits a condition?
    6 visualizaciones (últimos 30 días)
  
       Mostrar comentarios más antiguos
    
for ii=1:4
    deneme{ii,:}= vericell(class==ii,:);
        for j = 4:14
             deneme{ii}{:,j};
             meanres(ii,j) = mean (deneme{ii}{:,j});
             stdres(ii,j) = std(deneme{ii}{:,j});
             uscalc(ii,j) = (predictioncolumn(j) - meanres(ii,j)) ^2 / (2* (stdres(ii,j)^2));
             meancalc(ii,j) =  1/(sqrt(2*pi)* stdres(ii,j)) * (2.71^(uscalc(ii,j))) ;
             bolumler{ii,:} = sum(veri.Class==ii)/ length(veri.Class);
             likelihood(ii,j) = meancalc(ii,j) * bolumler{ii,:};
end
end
I want ii to stay as 1 while j keeps iterating until it reaches it's limit (14). And when it happens I want ii to be 2 and j to iterate from 4 to 14.
0 comentarios
Respuestas (2)
  njj1
      
 el 8 de Mzo. de 2018
        Can you clean up the code a little? It's not clear where the loops begin and end... A couple more questions/comments.
1) How can j be greater than 14, since the loop only has j moving from 4 to 14?
2) Try not to use "length"; instead use size(x,dim) or numel(x).
3) If you want to accumulate the multiplication of meancalc(ii,j)*bolumler{ii,:}, then you could use the variable likelihood in the multiplication (i.e., likelihood(ii,j) = likelihood(ii,j-1)*meancalc(ii,j)).
4 comentarios
  njj1
      
 el 8 de Mzo. de 2018
				Right, so try this:
for ii=1:4
  deneme{ii,:}= vericell(class==ii,:);
  for j = 4:14
           deneme{ii}{:,j};
           meanres(ii,j) = mean (deneme{ii}{:,j});
           stdres(ii,j) = std(deneme{ii}{:,j});
           uscalc(ii,j) = (predictioncolumn(j) - meanres(ii,j)) ^2 / (2* (stdres(ii,j)^2));
           meancalc(ii,j) =  1/(sqrt(2*pi)* stdres(ii,j)) * (2.71^(uscalc(ii,j))) ;
           bolumler{ii,:} = sum(veri.Class==ii)/ length(veri.Class);
           likelihood(ii,j) = meancalc(ii,j) * bolumler{ii,:};
  end
  what_you_care_about = prod(meancalc(ii,4:14))*bolumler{ii,:};
end
  Star Strider
      
      
 el 8 de Mzo. de 2018
        The code you posted should do that.
The outer ‘ii’ loop begins at 1. The inner ‘j’ loop will iterate from 4 to 14 for each value of the outer loop ‘ii’ variable. Then ‘ii’ will increase by 1, the inner loop iterates, and the process continues until ‘ii’ is 4 and the final iteration of ‘j’ is 14.
Also, the code you posted is missing an end for the ‘ii’ loop. I assume you simply forgot to copy it.
3 comentarios
  Star Strider
      
      
 el 8 de Mzo. de 2018
				Your code as you wrote it will do what you want.
This will allow you to see what your indices are doing:
for ii = 1:4
    for j = 4:14
        fprintf('ii = %2d\tj = %2d\n', ii,j)
    end
end
fprintf('\n\n')
Ver también
Categorías
				Más información sobre Loops and Conditional Statements en Help Center y File Exchange.
			
	Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!


