# Implicit expansion for griddedInterpolant

6 views (last 30 days)
Manuel Deuerling on 9 Nov 2023
Commented: Bruno Luong on 9 Nov 2023
Hello,
I have to do a lot of interpolation on one data set and already found that griddedInterpolant is way faster than interp2;
It also allows element wise operation if two tensors of the same size are provided. As these are very big in my case, but repeat in some dimensions, I am wondering if something like implicit expansion (I hope I am using the correct terms here) can be used to speed up the code. Because for other functions using repmat is not advised.
Here I provide a minimum working example to show how I currently do it. Commented out are ways that I wish were possible to speed up the code but I can't get to run.
[X,Y] = ndgrid(0:10);
Z = rand([11,11]);
J = griddedInterpolant(X,Y,Z);
xq = sort(rand([4 1 3])*10);
yq = sort(rand([1 3 3])*10);
zq = J(repmat(xq,1,length(yq),1),repmat(yq,length(xq),1,1));
% zq = J(xq,yq); %implicit expansion?
% zq = bsxfun(@J,xq,yq);
% zq=J({xq,yq}) %Matt J's suggestion
If you have any input ( that can be generalized to different sizes of grids and lookups etc) I would be really thankful!
edit: changed xq, yq in the eaxmple to higher tensor to represent my problem more accurately

Matt J on 9 Nov 2023
Use the grid vector syntax of griddedInterpolant:
zq=J({xq,yq})
Manuel Deuerling on 9 Nov 2023
@Matt J Yeah thats true. To be even more specific in my current problem it is like 100x1x100x100 and 1x100x1x100 so I would expect it to be useful. But this might change. So I guess there just isnt a generic solution I wished for. Thanks for the input I will work with that!
@Bruno Luong This actually seems to be faster. Not quite what i hoped for, as programming does not seem to be so clean (especially with multiple dimensions etc). But thanks too!
Bruno Luong on 9 Nov 2023
Not too much messy with 4+D
zq = zeros(max(size(xq),size(yq)));
for k=1:size(zq(:,:,:),3)
zq(:,:,k) = J({squeeze(xq(:,:,k)),squeeze(yq(:,:,k))});
end

Bruno Luong on 9 Nov 2023
Manuel Deuerling on 9 Nov 2023
Thanks for the suggestion & link.
If there is no other solution I will try this. I dont expect that an implementation by me could beat an efficient MathWorks algorithm in terms of memory/speed usage but I should probably just listen to you and try it.
Bruno Luong on 9 Nov 2023
It's probably depends on the size of your data. The strip down version like the one in this thread might beat TMW generic implementation.

### Categories

Find more on Matrix Indexing in Help Center and File Exchange

R2023b

### Community Treasure Hunt

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

Start Hunting!