Simultaneously interpolating over multiple rows of a matrix.

9 visualizaciones (últimos 30 días)
Brandon
Brandon el 7 de Abr. de 2021
Comentada: Brandon el 7 de Abr. de 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.

Respuesta aceptada

Matt J
Matt J el 7 de Abr. de 2021
Editada: Matt J el 7 de Abr. de 2021
This might be better,
e=1:K;
F=griddedInterpolant(mat(ind1,:),{e,grid});
vals_temp = F(e,qvec);
  2 comentarios
Brandon
Brandon el 7 de Abr. de 2021
I get this error:
Error using griddedInterpolant
Sample values must be of type double or single.
Brandon
Brandon el 7 de Abr. de 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!

Iniciar sesión para comentar.

Más respuestas (1)

Matt J
Matt J el 7 de Abr. de 2021
Editada: Matt J el 7 de Abr. de 2021
V=mat.';
vals_temp = interp1(grid,V(:,ind1),qvec);
  5 comentarios
Matt J
Matt J el 7 de Abr. de 2021
OK, but wait, now you're doing K^2 interpolation operations instead of K operations. Are you finding this to be faster regardless?
Brandon
Brandon el 7 de Abr. de 2021
Computation time is actually about 5% longer. Any other suggestions?

Iniciar sesión para comentar.

Categorías

Más información sobre Interpolation en Help Center y File Exchange.

Etiquetas

Community Treasure Hunt

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

Start Hunting!

Translated by