# How to interpolate 2 dimensions of a 4D array ?

4 views (last 30 days)
bhakti on 5 Dec 2023
Commented: bhakti on 8 Dec 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.
KALYAN ACHARJYA on 5 Dec 2023
Please provide the array sizes [x,y,z,t]?
bhakti on 5 Dec 2023
Edited: bhakti on 5 Dec 2023
Hello Kalyan,
Size of the array is [176,239,5,248] and it has to be changed/interpolated to [112,152,5,248].

Torsten on 6 Dec 2023
Moved: Torsten on 6 Dec 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
bhakti on 8 Dec 2023
Thank you!

Sulaymon Eshkabilov on 5 Dec 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
Torsten on 6 Dec 2023
And you want to compute velocity on a new grid for Longitude and Latitude with depth and time unchanged ?
bhakti on 6 Dec 2023
Hello Torsten,
Yes, that's what I am looking for.

Matt J on 5 Dec 2023
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 CommentsShow 1 older commentHide 1 older comment
Matt J on 6 Dec 2023
I don't fully understand the question, but imresizen is doing interpolation, just as you requested.
bhakti on 8 Dec 2023
Okay, I would try this.
Thank you.

### Categories

Find more on Interpolation in Help Center and File Exchange

### Community Treasure Hunt

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

Start Hunting!