在MatLab中通过对3D矩阵的分层进行插补得到2D矩阵 [英] Get interpolated 2D matrix by interpolating layers of 3D matrix in Matlab
本文介绍了在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)
如果
Xq
、Yq
和Zq
是不同方向的矢量,则Xq
、Yq
和Zq
在R3中被视为网格矢量。
这篇关于在MatLab中通过对3D矩阵的分层进行插补得到2D矩阵的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文