Looping through 3rd dimension
5 Ansichten (letzte 30 Tage)
Ältere Kommentare anzeigen
ellis langdon
am 13 Feb. 2019
Kommentiert: Matt J
am 14 Feb. 2019
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!
3 Kommentare
Akzeptierte Antwort
Jan
am 13 Feb. 2019
Bearbeitet: Jan
am 14 Feb. 2019
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 Kommentare
Siehe auch
Kategorien
Mehr zu Matrix Indexing finden Sie in Help Center und File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!