Получить интерполированную 2D-матрицу путем интерполяции слоев 3D-матрицы в Matlab - PullRequest
1 голос
/ 09 мая 2019

У меня есть 3D-матрица, определенная следующим образом:

A = zeros(3,3,3)*3;
A(:,:,1) = [1 2 3; 3 2 1; 3 4 7];
A(:,:,2) = [4 5 6; 6 5 4; 2 5 8];
A(:,:,3) = [7 8 9; 9 8 7; 3 6 9];

Моя цель - извлечь 2D-матрицу путем интерполяции 2 последовательных слоев 3D-матрицы.В этом примере я хочу, чтобы матрица находилась на 75% расстоянии между слоями 1 и 2. Я смог добиться этого, выполнив простую линейную интерполяцию, но я хотел бы получить более эффективный и умный способ выполнения этой задачи, возможно, используя преимуществавстроенные функции Matlab.

l = 1; % Layer: 1<= l <= size(A,3)-1
x = 0.75; % Distance at which i want to interpolate from layer 0<= x <= 1
AMin = A(:,:,l);
AMax = A(:,:,l+1);

AMin + (AMax-AMin)*x

Что возвращает

3.25         4.25         5.25
5.25         4.25         3.25
2.25         4.75         7.75

, как и ожидалось.

Ответы [ 2 ]

3 голосов
/ 09 мая 2019

Встроенная функция interp3 может сделать то, что вы ищете.

A = zeros(3,3,3)*3;
A(:,:,1) = [1 2 3; 3 2 1; 3 4 7];
A(:,:,2) = [4 5 6; 6 5 4; 2 5 8];
A(:,:,3) = [7 8 9; 9 8 7; 3 6 9];

X = 0:size(A,1)-1;
Y = 0:size(A,2)-1;

[XX,YY] = meshgrid(X,Y); % 2D grid - so we can evaluate at many points
Target_Z = 0.75 * ones(size(XX));

OUT = interp3(X,Y,Z,A,XX,YY,Target_Z); 

Вывод будет

OUT =
    3.2500    5.2500    2.2500
    4.2500    4.2500    4.7500
    5.2500    3.2500    7.7500

Конечно, вам не нужно выбирать обычную сетку для оценки этой функции.Вы можете легко выбрать любую (x, y, z) тройку для оценки.

3 голосов
/ 09 мая 2019

Вы можете использовать interp3, но ваш код яснее и, вероятно, быстрее:

x = 1.75; % interpolate between 3rd-dim layers 1 and 2, closer to 2
result = interp3(A, 1:size(A,2), (1:size(A,1)).', x);

Обратите внимание, что вторым и третьим аргументами interp3 здесь являются строка и вектор столбца. Это выбирает все значения каждого 3-го слоя, потому что, из документации,

Vq = interp3(V,Xq,Yq,Zq)

Если Xq, Yq и Zq являются векторами различной ориентации, то Xq, Yq и Zq рассматриваются как векторы сетки в R 3 .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...