# Interpolation of 3D arrays against a 1D vector

1 view (last 30 days)
Hello all.
I have a video data represented as 3D matrix in the form of Data(x,y,t). Here, x,y represent the pixel number and t is the time. I have the time vector stored in a separate variable. I need to interpolate the variable Data at a new time vector represented by variable t_new to get the new variable Data_new(x,y,t_new). I am using the following code:
n = 20;
m = 60;
t = linspace(0,1,n)';
t_new = linspace(0,1,m)';
Data = rand(50,50,n);
Data_new = permute(interpn(t,permute(Data,[3 2 1]),t_new),[3 2 1]);
% Verification by plotting the time history of selected pixel:
x = 25;
y = 25;
plot(t,reshape(Data(x,y,:),n,1),t_new,reshape(Data_new(x,y,:),m,1)) It looks fine to me. but the main concerns I am asking about:
1. I had to use permute twice. I am not able to do it without permute. Can I avoid this?
2. Is there a faster method to perform this interpolation?
Thanks and best,

Matt J on 25 Aug 2022
Edited: Matt J on 25 Aug 2022
[Nx,Ny,~]=size(Data);
F=griddedInterpolant({1:Nx,1:Ny,t},Data);
Data_new=F({1:Nx,1:Ny,t_new});
##### 2 CommentsShowHide 1 older comment
Can you tell me why griddedInterpolant is nearly 5-6 times faster than interpn? Thanks!

### Categories

Find more on Interpolation in Help Center and File Exchange

R2021b

### Community Treasure Hunt

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

Start Hunting!