在MatLab中通过对3D矩阵的分层进行插补得到2D矩阵 [英] Get interpolated 2D matrix by interpolating layers of 3D matrix in Matlab

查看:23
本文介绍了在MatLab中通过对3D矩阵的分层进行插补得到2D矩阵的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有一个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];

我的目标是通过对3D矩阵的两个连续层进行内插来提取2D矩阵。在本例中,我希望矩阵位于第1层和第2层之间75%的距离。我可以通过进行简单的线性内插来实现这一点,但我希望获得一些更好、更智能的方法来执行此任务,或许可以利用内置的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

与预期一致。

推荐答案

您可以使用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-DIM层的所有值,因为在文档中,

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

如果XqYqZq是不同方向的矢量,则XqYqZq在R3中被视为网格矢量。

这篇关于在MatLab中通过对3D矩阵的分层进行插补得到2D矩阵的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆