Borrar filtros
Borrar filtros

How to interpolate 2 dimensions of a 4D array ?

1 visualización (últimos 30 días)
bhakti
bhakti el 5 de Dic. de 2023
Comentada: bhakti el 8 de Dic. de 2023
I have a 4D array which represents velocity(ocean currents) in a region, and I have to interpolate it to a different size.
Some insights on data;
1) Variables of 4 D array are (Longitude, latitude, depth, time).
2) Size of the array is [176,239,5,248]. I have to change/interpolate the size of array to [112,152,5,248]. Can someone please help in making the above said change(s)?
This is link to data file.
Thanks in advance!
  4 comentarios
KALYAN ACHARJYA
KALYAN ACHARJYA el 5 de Dic. de 2023
Please provide the array sizes [x,y,z,t]?
bhakti
bhakti el 5 de Dic. de 2023
Editada: bhakti el 5 de Dic. de 2023
Hello Kalyan,
Thanks for your response.
Size of the array is [176,239,5,248] and it has to be changed/interpolated to [112,152,5,248].

Iniciar sesión para comentar.

Respuesta aceptada

Torsten
Torsten el 6 de Dic. de 2023
Movida: Torsten el 6 de Dic. de 2023
% Generate artificial data in longitude and latitude (176 points resp. 239
% points)
longdata = linspace(0,2,176);
latdata = linspace(0,5,239);
veldata = rand(numel(longdata),numel(latdata),5,248);
% Prescribe new grid in longitude and latitude direction (112 points resp.
% 152 points)
longdata_new = linspace(0,2,112);
latdata_new = linspace(0,5,152);
% Build new grid
[longq,latq] = meshgrid(longdata_new,latdata_new);
% Compute new velocity data
veldata_new = zeros(numel(longdata_new),numel(latdata_new),5,248);
for iz = 1:5
for it = 1:248
veldata_cut = veldata(:,:,iz,it);
veldata_new(:,:,iz,it) = interp2(longdata,latdata,veldata_cut.',longq,latq).';
end
end

Más respuestas (2)

Sulaymon Eshkabilov
Sulaymon Eshkabilov el 5 de Dic. de 2023
Your data size is [176 238 5 248] and not [176,239,40,248].
In this case, interpolate your multi-D data, griddatan() to be used: DOC
  5 comentarios
Torsten
Torsten el 6 de Dic. de 2023
And you want to compute velocity on a new grid for Longitude and Latitude with depth and time unchanged ?
bhakti
bhakti el 6 de Dic. de 2023
Hello Torsten,
Thanks for your response.
Yes, that's what I am looking for.

Iniciar sesión para comentar.


Matt J
Matt J el 5 de Dic. de 2023
You can use imresizen, to be downloaded from
A= rand([176,239,5,248]);
B=imresizen(A, [112,152,5,248]./[176,239,5,248]);
whos A B
Name Size Bytes Class Attributes A 176x239x5x248 417274880 double B 112x152x5x248 168878080 double
  3 comentarios
Matt J
Matt J el 6 de Dic. de 2023
I don't fully understand the question, but imresizen is doing interpolation, just as you requested.
bhakti
bhakti el 8 de Dic. de 2023
Okay, I would try this.
Thank you.

Iniciar sesión para comentar.

Categorías

Más información sobre Interpolation en Help Center y File Exchange.

Etiquetas

Community Treasure Hunt

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

Start Hunting!

Translated by