# Simultaneously interpolating over multiple rows of a matrix.

7 views (last 30 days)
Brandon on 7 Apr 2021
Commented: Brandon on 7 Apr 2021
I have a matrix ("mat") of size N*M where each row is defined over a grid ("grid"), and I would like to obtain interpolated values ("vals") over a subset of rows of length K ("ind1") over a query vector ("qvec"). This is part of a larger iterative routine, where the size and elements of ind1 and the elements of mat and qvec change each iteration. I'm currently using a for-loop over the subset of rows, interpolating one at time. Here is a simplified example:
K = length(ind1);
vals_temp = zeros(N,1);
for ii = 1:K
ind2 = ind1(ii);
vals_temp(ind2,1) = interp1(grid,mat(ind2,:),qvec(ind2));
end
vals = vals_temp(vals_temp>0);
I would like to be able to do this without a loop because this is very time consuming. I’m thinking that I can use interpn over the entire subset ind1, but I’m having trouble figuring out how to make the inputs conformable. Any help would be appreciated.

Matt J on 7 Apr 2021
Edited: Matt J on 7 Apr 2021
This might be better,
e=1:K;
F=griddedInterpolant(mat(ind1,:),{e,grid});
vals_temp = F(e,qvec);
##### 2 CommentsShowHide 1 older comment
Brandon on 7 Apr 2021
it appears the inputs to griddedInterpolant above are reversed:
F=griddedInterpolant({e,grid},mat(ind1,:));
Now there is about a 6% improvement in computational time. Thanks!

Matt J on 7 Apr 2021
Edited: Matt J on 7 Apr 2021
V=mat.';
vals_temp = interp1(grid,V(:,ind1),qvec);
Brandon on 7 Apr 2021
Computation time is actually about 5% longer. Any other suggestions?