Saving values from a for loop in a table
18 ビュー (過去 30 日間)
古いコメントを表示
Hey! I am trying to use a loop within a loop to extract maximum temperature for a specified cycle and index. So basically I first try to find rows for a given index and then use the second for loop to find maximum temperature in a specified cycle within that index. However, MATLAB seems to overwrite the values and only stored the last iteration in my table. What am I doing wrong?
Code:
temp = [1;2;4;5;1;8;3;4]; % temperature
ind = [1;1;1;1;2;2;2;2]; % index
cycle = [1;1;2;2;1;1;2;2]; % cycle
f = table(cycle,temp,ind);
in = unique(ind);
inx = unique(cycle);
tab = table;
for i = 1:length(in)
rows = find( ind == in(i))
for j = 1:length(inx)
tab.tmax(j) = max(f.temp(j))
end
end
0 件のコメント
採用された回答
Steven Lord
2022 年 1 月 5 日
temp = [1;2;4;5;1;8;3;4]; % temperature
ind = [1;1;1;1;2;2;2;2]; % index
cycle = [1;1;2;2;1;1;2;2]; % cycle
f = table(cycle,temp,ind)
I'm not entirely sure your nested loops do what you want, but I think what you want is something like this:
tab2 = groupsummary(f, ["ind", "cycle"], 'max', 'temp')
Use the ind and cycle variables in your table f as the grouping variables and operate on the data variable temp, computing the summary statistic max. Looking at row 3 of tab2, the values of temp for ind == 2 and cycle == 1 in f are 1 and 8 and indeed the maximum of those two values is the 8 in row 3 of the variable max_temp in tab2.
その他の回答 (1 件)
Rik
2022 年 1 月 5 日
Your index only depends on j, so it will overwrite all previous results.
Why don't you use a rectangular array to hold the maximum temperature?
temp = [1;2;4;5;1;8;3;4]; % temperature
ind = [1;1;1;1;2;2;2;3]; % index
cycle = [1;1;2;2;1;1;2;2]; % cycle
accumarray([ind cycle],temp,[],@max,NaN)
(I changed the last element of ind to show you the rows and columns)
参考
カテゴリ
Help Center および File Exchange で Logical についてさらに検索
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!