Implicit expansion for griddedInterpolant
3 次查看(过去 30 天)
显示 更早的评论
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 个评论
采纳的回答
Matt J
2023-11-9
zq=J({xq,yq})
5 个评论
Bruno Luong
2023-11-9
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
更多回答(1 个)
Bruno Luong
2023-11-9
You can do your own extension as showed here
2 个评论
Bruno Luong
2023-11-9
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.
另请参阅
类别
在 Help Center 和 File Exchange 中查找有关 Matrix Indexing 的更多信息
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!