【发布时间】:2019-10-04 20:24:59
【问题描述】:
我是 MATLAB 用户,我正在尝试将 Python 中的一些代码翻译为作业。由于我注意到原始代码的 3d 插值结果中两种语言之间存在一些差异,因此我试图通过分析一个简单的示例来解决这个问题。
我设置了一个 2x2x2 矩阵(下面命名为 blocc),其中包含一些值,其坐标位于三个向量 (X,Y,Z) 中。给定一个查询点,我使用 3D 线性插值来查找插值。同样,我在 MATLAB 和 Python 中得到不同的结果(代码如下)。
Python
import numpy as np
import scipy.interpolate as si
X,Y,Z =(np.array([1, 2]),np.array([1, 2]),np.array([1, 2]))
a = np.ones((2,2,1))
b = np.ones((2,2,1))*2
blocc = np.concatenate((a,b),axis=2) # Matrix with values
blocc[1,0,0]=7
blocc[0,1,1]=7
qp = np.array([2,1.5,1.5]) #My query point
value=si.interpn((X,Y,Z),blocc,qp,'linear')
print(value)
这里我得到 value=3
MATLAB
blocc = zeros(2,2,2);
blocc(:,:,1) = ones(2,2);
blocc(:,:,2) = ones(2,2)*2;
blocc(2,1,1)=7;
blocc(1,2,2)=7;
X=[1,2];
Y=[1,2];
Z=[1,2];
qp = [2 1.5 1.5];
value=interp3(X,Y,Z,blocc,qp(1),qp(2),qp(3),'linear')
这里的值=2.75
我不明白为什么:我认为对于 Python 中的插值和/或矩阵索引如何工作,我有些不明白。你能帮我说清楚吗?谢谢!
【问题讨论】:
-
在 MATLAB 中你是
value=interp3(X,Y,Z,blocc,1.5,1.5,1.5,'linear'),你不是说value=interp3(X,Y,Z,blocc,qp(1),qp(2),qp(3),'linear')吗?价值观不同! -
这就是我所做的,只是复制了错误的行。我编辑了我的帖子,谢谢
标签: python matlab multidimensional-array interpolation