Implicit expansion for griddedInterpolant
2 views (last 30 days)
Show older comments
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
0 Comments
Accepted Answer
Matt J
on 9 Nov 2023
zq=J({xq,yq})
5 Comments
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
More Answers (1)
Bruno Luong
on 9 Nov 2023
You can do your own extension as showed here
2 Comments
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.
See Also
Categories
Find more on Matrix Indexing 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!