How do I get each array produced by a for loop iteration to be added as a different column in matrix?
2 次查看(过去 30 天)
显示 更早的评论
I have a for loop that goes through the years 2000–2020 and picks out the temperature and datenum value for each day in the specified year. The temperature is stored in an array, p1, and the datenums are stored in an array, p2. p1 and p2 have different values with each loop iteration/each year, and I'd like to store those yearly values as columns in a matrix (olTempMatrix for temperatures and olDateMatrix for datenums). The problem I'm having with my for loop is that it only stores the values for the final year (2020), rather than storing each year in its own column, so my two matrices end up with the same set of values in every column.
My code is reproduced below, and the file with olDateNums and olYears is attached so you can reproduce my results.
There must be a simple change I can make here to get my matrices to have each column fill with the data from each different year... but Im stuck! Thanks in advance for the help.
[olYr,olMo,olDay] = datevec(olDateNums);
olTempMatrix = NaN(365,21,'single');
olDateMatrix = NaN(365,21,'single');
for olYears = 2000:2020
p = find(olYr == olYears);
p1 = olTemps(p) %this produces an array of daily avg temp for each year
p2 = olDateNums(p) %this produces an array of datenums for each year
for columns = 1:21 %Make each array into one column of a matrix
olTempMatrix(:,columns) = p1;
olDateMatrix(:,columns) = p2;
end
end
olTempMatrix
olDateMatrix
0 个评论
采纳的回答
Scott MacKenzie
2021-6-25
This should work:
k = 1;
for olYears = 2000:2020
p = find(olYr == olYears);
p1 = olTemps(p) %this produces an array of daily avg temp for each year
p2 = olDateNums(p) %this produces an array of datenums for each year
olTempMatrix(:,k) = p1;
olDateMatrix(:,k) = p2;
k = k + 1;
end
更多回答(0 个)
另请参阅
类别
在 Help Center 和 File Exchange 中查找有关 Creating and Concatenating Matrices 的更多信息
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!