Simultaneously interpolating over multiple rows of a matrix.

조회 수: 5 (최근 30일)
Brandon
Brandon 2021년 4월 7일
댓글: Brandon 2021년 4월 7일
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
Matt J 2021년 4월 7일
편집: Matt J 2021년 4월 7일
This might be better,
e=1:K;
F=griddedInterpolant(mat(ind1,:),{e,grid});
vals_temp = F(e,qvec);
  댓글 수: 2
Brandon
Brandon 2021년 4월 7일
I get this error:
Error using griddedInterpolant
Sample values must be of type double or single.
Brandon
Brandon 2021년 4월 7일
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!

댓글을 달려면 로그인하십시오.

추가 답변 (1개)

Matt J
Matt J 2021년 4월 7일
편집: Matt J 2021년 4월 7일
V=mat.';
vals_temp = interp1(grid,V(:,ind1),qvec);
  댓글 수: 5
Matt J
Matt J 2021년 4월 7일
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 2021년 4월 7일
Computation time is actually about 5% longer. Any other suggestions?

댓글을 달려면 로그인하십시오.

카테고리

Help CenterFile Exchange에서 Interpolation에 대해 자세히 알아보기

태그

Community Treasure Hunt

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

Start Hunting!

Translated by