Stacking 2D matrix to 3D using time as a third variable

Hi I am a beginner in matlab and I am trying to stack 2D matrix into 3D matrix. I have variable sst as 1440*720 and time variable as 1*366. These are all daily data. How do I stack time to sst so that I have 366*1440*720 matrix. I have tried using cat and meshgrid but nothing seems to work. Thank you.
data.time = cat(3,data.time,data.sst)
or
[data.sst1]=meshgrid(data.sst,data.time); (this multiplies 1440*720 and gives me 366*1036800 matrix)

3 commentaires

To end up with a 366*1440*720 array, you would need 366 individual 1440*720 matrices. In other words, you need a 1440*720 matrix for each time value. But it seems that you have one 1440*720 matrix and one scalar for each time value.
Put another way: a 366*1440*720 array has 366*1440*720 = 379,468,800 elements, but you have 366 + 1440*720 = 1,037,166 elements, not enough for a 366*1440*720 array.
If you had 366 individual 1440*720 matrices, then you could stack (and reshape/permute) them into a 366*1440*720 array (or a 1440*720*366 array, or whatever, as long as there's still 379,468,800 elements), but it doesn't seem like that's what you have.
Ashal
Ashal le 9 Déc 2022
Modifié(e) : Ashal le 9 Déc 2022
Thank you. I do have individual 366 1440*720 and I am using the following code to read data. So basically I have 366 different files that has sst(1440*720) and time values Here ii =366. I wish I could add data here but it is a huge folder.
gunzip("2020.zip.gz")
!ls 2020/oisst-*.nc>data.ptr
x = importdata('data.ptr'); %here x is cell array
for ii = 1:length(x);
data.time(ii) = ncread(x{ii},'time');
%ncdisp("2020/oisst-avhrr-v02r01.20200101.nc"); %ncdisp look inside nc file
data.sst = ncread(x{ii}, 'sst');
end
Just out of curiousity ...
366, OK, days in 2020 (although you may have a bug when you work on a non-leap year)
1440, OK, so maybe 24*60 minutes in a day?
What does 720 represent?
Or is 1440x720 a spatial lat/lon grid?

Connectez-vous pour commenter.

 Réponse acceptée

Voss
Voss le 9 Déc 2022
Modifié(e) : Voss le 9 Déc 2022
nx = numel(x);
data = struct( ...
'time',zeros(1,nx), ...
'sst',zeros(nx,1440,720);
for ii = 1:nx
data.time(ii) = ncread(x{ii},'time');
%ncdisp("2020/oisst-avhrr-v02r01.20200101.nc"); %ncdisp look inside nc file
data.sst(ii,:,:) = ncread(x{ii}, 'sst');
end
That makes data.sst a 366*1440*720 array, as requested.

2 commentaires

It worked. Thank you so much.
You're welcome!

Connectez-vous pour commenter.

Plus de réponses (0)

Catégories

En savoir plus sur App Building dans Centre d'aide et File Exchange

Community Treasure Hunt

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

Start Hunting!

Translated by