Interpolating one dimension in 4-th dimensional matrix?

조회 수: 6 (최근 30일)
Robert
Robert 2011년 5월 27일
댓글: Argho Datta 2019년 6월 13일
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
Argho Datta
Argho Datta 2019년 6월 13일
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일
Thank you both guys, both variants are working just fine.
Thanks again.

카테고리

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