How to keep an element fixed until it fits a condition?
조회 수: 1 (최근 30일)
이전 댓글 표시
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
답변 (2개)
njj1
2018년 3월 8일
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
njj1
2018년 3월 8일
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
2018년 3월 8일
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
Star Strider
2018년 3월 8일
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')
참고 항목
카테고리
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!