Interpolating one dimension in 4-th dimensional matrix?

Hi Matlab users.
I have a matrix which is like that (132,238,35,6) this is for longitude, latitude, depth and time. And I want to interpolate the depth so I will have 70 instead of 35. The problem is that I don't know how to properly do that because if I try to call the depth like that: (1,1,:,1) I will have only the one corresponding first longitude and first latitude, not the entire depth. Also If I call like that: (:,:,35,:) the interpolation function don't work. Is there any way to interpolate a 4-th dimensional matrix so I will obtain 70 depths instead of 35?
Thank you,
Robert.

 채택된 답변

Walter Roberson
Walter Roberson 2011년 5월 27일
interpn(Longs,Lats,Depths,Times,TheMatrix,Longs,Lats,NewDepths,Times)
Note: if you do not want to extrapolate the most obvious new depths would include the ones half-way between the old depths, which would lead to 69 output depths, not 70.

댓글 수: 1

Hi, sorry to dig this up, but what does the argmuent NewDepths refer to? Thanks!

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

추가 답변 (2개)

Jan
Jan 2011년 5월 27일
Do you want a linear interpolation? Then you can do it manually also:
data = rand(132,238,35,6);
% 70 values between 1 and 35:
v = linspace(1, 35, 70)
% Indices of left and right slice of the array:
t = floor(v);
p = v - t;
% Consider edge at the end:
t(end) = t(end) - 1;
p(end) = 1;
p = reshape(p, 1, 1, []);
R = bsxfun(@times, data(:, :, t, :), (1 - p)) + ...
bsxfun(@times, data(:, :, t+1, :), p);
Robert
Robert 2011년 5월 27일

0 개 추천

Thank you both guys, both variants are working just fine.
Thanks again.

카테고리

도움말 센터File Exchange에서 Interpolation에 대해 자세히 알아보기

질문:

2011년 5월 27일

댓글:

2019년 6월 13일

Community Treasure Hunt

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

Start Hunting!

Translated by