How to keep an element fixed until it fits a condition?

2 ビュー (過去 30 日間)
Sukru Yavuz
Sukru Yavuz 2018 年 3 月 8 日
コメント済み: njj1 2018 年 3 月 8 日
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.

回答 (2 件)

njj1
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 件のコメント
Sukru Yavuz
Sukru Yavuz 2018 年 3 月 8 日
I am really confused I am sorry. I need the multiplication of meancalc(ii,j) like: meancalc(1,4) * meancalc(1,5) * meancalc(1,6)... * meancalc(1,14) * bolumler{ii,:} I need that result.
njj1
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
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
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')
Sukru Yavuz
Sukru Yavuz 2018 年 3 月 8 日
ii = 1 j = 4
ii = 1 j = 5
ii = 1 j = 6 ii = 1 j = 7
ii = 1 j = 8
ii = 1 j = 9
ii = 1 j = 10
ii = 1 j = 11
ii = 1 j = 12
ii = 1 j = 13
ii = 1 j = 14
The result is looking like this, thank you. Sorry about my confusion, my question is I want meancalc(1,4:14) to be multiplied like meancalc(ii,4) * meancalc(ii,5) ... meancalc(ii,14)

サインインしてコメントする。

カテゴリ

Help Center および File ExchangeLoops and Conditional Statements についてさらに検索

Community Treasure Hunt

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

Start Hunting!

Translated by