Looping through 3rd dimension
10 次查看(过去 30 天)
显示 更早的评论
Hi
I am currently working on a project with temperature data. The data is stored in a 128 x 64 x 2160 matrix called T.
I have calculated that summer is between index 30:48 and then +72 for the consecutive summer years.
I want to loop through the third dimension and stored this in a new variable ST.
Please see below code I have already made, i'm not too sure where to go after this.
ST=NaN*ones(128,64,30) %Setting up grid
x=0;
for i=30:48;
x=x+1;
ST(:,:,x) = T(:,:,[i:i]); %Looping through third dimension 30:48
end
ST should essentially be 128 x 64 x 30 or 128 x 64 x 540 matrix
Any help would be great, thank you!
采纳的回答
Jan
2019-2-13
编辑:Jan
2019-2-14
Your loop has 19 iterations. It is not clear, why you expect that the output has a size of 30 or 540 in the 3rd dimension.
[i:i] is the same as the much simpler: i .
A simplified version of your code:
ST = T(:, :, 30:48)
No loop needed. But I do not see, how this could produce a size of 30 or 540.
By the way, this can be simplified also:
ST=NaN*ones(128,64,30)
% Better:
ST = NaN(128, 64, 30)
But it is not useful here, so better omit it.
[EDITED] After the clarifications:
ST = NaN(128, 64, 18, 30); % Pre-allocate
ini = 30;
len = 18;
for k = 1:30
ST(:, :, :, k) = T(:, :, ini:ini + len - 1);
ini = ini + 72;
end
ST = reshape(ST, 128, 64, 540);
% Or:
v = 1:72;
match = (30 <= v & v < 48);
ST = T(:, :, repmat(match, 1, 30));
2 个评论
另请参阅
类别
在 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!