Expanding and interpolating between sequential values in a nx2 matrix
조회 수: 4 (최근 30일)
이전 댓글 표시
Hello,
I wish to linearly interpolate between sequential values in a given sorted 2xn matrix and a integer or non-integer sub-interval spacing value. For instance:
Given
[1 3; 2 6; 3 1; 4 9]
and an interpolation interval of, say, 0.5 (or any other value less than the minimum spacing between sequential values in column 1)
I hope to return an expanded nx2 matrix containing:
[1 3; 1.5 4.5; 2 6; 2.5 3.5; 3 1; 3.5 5; 4 9]
Note: The first column does not have to possess equally-spaced values.
I have written a function to do this using looping and it works quite well. However, when the input matrix exceeds 10,000 rows and the sub-interval is less than 0.5 the efficiency of my function drops off very quickly.
Does anyone know of a way to accomplish this goal using vectorization operations so that I can avoid using - or minimize - looping in my function?
Thank you in advance.
David
댓글 수: 0
채택된 답변
the cyclist
2011년 8월 24일
One possible method:
x0 = [1 3; 2 6; 3 1; 4 9]; % Original array
interval = 0.5;
xi = [min(x0(:,1)):interval:max(x0(:,1))]'; % Define new spacing by interval
yi = interp1(x0(:,1),x0(:,2),xi); % Interpolated values at new spacing
newArray = [xi yi]; % New array
댓글 수: 0
추가 답변 (2개)
Paulo Silva
2011년 8월 24일
m=[1 3; 2 6; 3 1; 4 9];
mm=interp2(m);
mm(:,2)=[]; %remove the midle column
mm %your result
댓글 수: 5
Fangjun Jiang
2011년 8월 24일
Got it. Thank you, Paulo! Honestly I can't vote for your solution though!
참고 항목
카테고리
Help Center 및 File Exchange에서 Matrix Indexing에 대해 자세히 알아보기
제품
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!