我正在将代码从Matlab转换为Python 2.7,并且我对interp1函数的转换有问题。 我已经查看了已经发布的类似问题,但还没有设法解决它。 问题是新生成的值(yn)的向量的第一个值是不同的,而其余的几乎相同。 我使用不同的插值方法时会得到略有不同的值,但问题相同。 目前我真的不知道为什么会这样。 有没有人对此有任何见解或看到我可能犯的任何错误? 谢谢。
变量:
x = [5.5 , 5.46678 , 5.408315, 5.33929 , 5.261025, 5.17605 , 5.08684 , 4.995375, 4.902755, 4.80942 , 4.7157 , 4.621815, 4.52782 , 4.433715, 4.339555, 4.245395, 4.151235, 4.05713 , 3.962915, 3.868645, 3.77432 , 3.680105, 3.585945, 3.491895, 3.397845, 3.303905, 3.21002 , 3.11619 , 3.02247 , 2.928805, 2.835195, 2.741695, 2.64836 , 2.55519 , 2.462295, 2.36951 , 2.27689 , 2.184435, 2.092255, 2.00035 , 1.908775, 1.817475, 1.726505, 1.63592 , 1.54583 , 1.4564 , 1.36752 , 1.279245, 1.19163 , 1.10539 , 1.02135 , 0.94006 , 0.86163 , 0.786115, 0.713515, 0.64394 , 0.577555, 0.514635, 0.45562 , 0.400785, 0.35035 , 0.304425, 0.26301 , 0.22627 , 0.193875, 0.16544 , 0.14058 , 0.118745, 0.09944 , 0.082335, 0.067265, 0.05401 , 0.042405, 0.03234 , 0.023595, 0.01628 , 0.010175, 0.00528 , 0.001485, -0.00121 , -0.002805, -0.003355, -0.00275 , -0.000935] y = [0.19896, 0.18722, 0.155 , 0.13133, 0.11168, 0.09543, 0.0815 , 0.06556, 0.04191, 0.0117 , 0.00513, 0.00123, -0.0036 , -0.00885, -0.01429, -0.01985, -0.02532, -0.03065, -0.03574, -0.04082, -0.04594, -0.05104, -0.05596, -0.06091, -0.06561, -0.07023, -0.07482, -0.07913, -0.08341, -0.08749, -0.09155, -0.09551, -0.09952, -0.10334, -0.10694, -0.11011, -0.11319, -0.11587, -0.11856, -0.12092, -0.12277, -0.12428, -0.12506, -0.12567, -0.12567, -0.12497, -0.12369, -0.12135, -0.11944, -0.1191 , -0.11983, -0.11819, -0.11197, -0.10004, -0.08016, -0.05285, -0.01569, 0.03055, 0.08527, 0.1492 , 0.21971, 0.29507, 0.37453, 0.45682, 0.53766, 0.61562, 0.6916 , 0.763 , 0.82907, 0.88665, 0.9367 , 0.97418, 0.99617, 0.99807, 0.97457, 0.91708, 0.81796, 0.66987, 0.46359, 0.19778, -0.13378, -0.54232, -1.0126 , -1.5297 ] xn = [ 0., 0.61111111, 1.22222222, 1.83333333, 2.44444444, 3.05555556, 3.66666667, 4.27777778, 4.88888889, 5.5 ]Matlab代码:
yn_mat = interp1(x,y,xn,'linear','extrap')Python代码:
from scipy.interpolate import InterpolatedUnivariateSpline yn_f1 = InterpolatedUnivariateSpline(x[::-1], y[::-1]) yn_py1 = yn_f1(xn) from scipy.interpolate import interp1d yn_f2 = interp1d(x[::-1], y[::-1]) yn_py2 = yn_f2(xn) import numpy as np yn_py3 = np.interp(xn, x[::-1], y[::-1])结果:
yn_mat = [-0.7596, -0.0345, -0.1201, -0.1240, -0.1075, -0.0819, -0.0517, -0.0179, 0.0374, 0.1990 ] yn_py1 = [-0.23310355, -0.03594415, -0.11996893, -0.12406894, -0.10757466, -0.08191329, -0.05174936, -0.01793778, 0.0371338 , 0.19896 ] yn_py2 = [ 0.31712327, -0.03447354, -0.12010691, -0.12401772, -0.10754986, -0.08189905, -0.05174217, -0.01793785, 0.03742192, 0.19896 ] yn_py3 = [ 0.31712327, -0.03447354, -0.12010691, -0.12401772, -0.10754986, -0.08189905, -0.05174217, -0.01793785, 0.03742192, 0.19896 ]I'm converting code from Matlab to Python 2.7 and am having a problem with the conversion of the interp1 function. I have looked at similar questions already posted but have not yet managed to solve it. The problem is that the first value of the vector of newly generated values (yn) is different while the rest are almost identical. I get slightly different values but the same problem when using different interpolation methods. At the moment I really have no clue why this is. Does anyone have any insight into this or see any errors I might have made? Thanks.
Variables:
x = [5.5 , 5.46678 , 5.408315, 5.33929 , 5.261025, 5.17605 , 5.08684 , 4.995375, 4.902755, 4.80942 , 4.7157 , 4.621815, 4.52782 , 4.433715, 4.339555, 4.245395, 4.151235, 4.05713 , 3.962915, 3.868645, 3.77432 , 3.680105, 3.585945, 3.491895, 3.397845, 3.303905, 3.21002 , 3.11619 , 3.02247 , 2.928805, 2.835195, 2.741695, 2.64836 , 2.55519 , 2.462295, 2.36951 , 2.27689 , 2.184435, 2.092255, 2.00035 , 1.908775, 1.817475, 1.726505, 1.63592 , 1.54583 , 1.4564 , 1.36752 , 1.279245, 1.19163 , 1.10539 , 1.02135 , 0.94006 , 0.86163 , 0.786115, 0.713515, 0.64394 , 0.577555, 0.514635, 0.45562 , 0.400785, 0.35035 , 0.304425, 0.26301 , 0.22627 , 0.193875, 0.16544 , 0.14058 , 0.118745, 0.09944 , 0.082335, 0.067265, 0.05401 , 0.042405, 0.03234 , 0.023595, 0.01628 , 0.010175, 0.00528 , 0.001485, -0.00121 , -0.002805, -0.003355, -0.00275 , -0.000935] y = [0.19896, 0.18722, 0.155 , 0.13133, 0.11168, 0.09543, 0.0815 , 0.06556, 0.04191, 0.0117 , 0.00513, 0.00123, -0.0036 , -0.00885, -0.01429, -0.01985, -0.02532, -0.03065, -0.03574, -0.04082, -0.04594, -0.05104, -0.05596, -0.06091, -0.06561, -0.07023, -0.07482, -0.07913, -0.08341, -0.08749, -0.09155, -0.09551, -0.09952, -0.10334, -0.10694, -0.11011, -0.11319, -0.11587, -0.11856, -0.12092, -0.12277, -0.12428, -0.12506, -0.12567, -0.12567, -0.12497, -0.12369, -0.12135, -0.11944, -0.1191 , -0.11983, -0.11819, -0.11197, -0.10004, -0.08016, -0.05285, -0.01569, 0.03055, 0.08527, 0.1492 , 0.21971, 0.29507, 0.37453, 0.45682, 0.53766, 0.61562, 0.6916 , 0.763 , 0.82907, 0.88665, 0.9367 , 0.97418, 0.99617, 0.99807, 0.97457, 0.91708, 0.81796, 0.66987, 0.46359, 0.19778, -0.13378, -0.54232, -1.0126 , -1.5297 ] xn = [ 0., 0.61111111, 1.22222222, 1.83333333, 2.44444444, 3.05555556, 3.66666667, 4.27777778, 4.88888889, 5.5 ]Matlab code:
yn_mat = interp1(x,y,xn,'linear','extrap')Python code:
from scipy.interpolate import InterpolatedUnivariateSpline yn_f1 = InterpolatedUnivariateSpline(x[::-1], y[::-1]) yn_py1 = yn_f1(xn) from scipy.interpolate import interp1d yn_f2 = interp1d(x[::-1], y[::-1]) yn_py2 = yn_f2(xn) import numpy as np yn_py3 = np.interp(xn, x[::-1], y[::-1])Results:
yn_mat = [-0.7596, -0.0345, -0.1201, -0.1240, -0.1075, -0.0819, -0.0517, -0.0179, 0.0374, 0.1990 ] yn_py1 = [-0.23310355, -0.03594415, -0.11996893, -0.12406894, -0.10757466, -0.08191329, -0.05174936, -0.01793778, 0.0371338 , 0.19896 ] yn_py2 = [ 0.31712327, -0.03447354, -0.12010691, -0.12401772, -0.10754986, -0.08189905, -0.05174217, -0.01793785, 0.03742192, 0.19896 ] yn_py3 = [ 0.31712327, -0.03447354, -0.12010691, -0.12401772, -0.10754986, -0.08189905, -0.05174217, -0.01793785, 0.03742192, 0.19896 ]最满意答案
您的(反向) x数组没有增加( -0.00275 < -0.000935 ),这应该是正确使用np.interp1d 。 查看文档 。 没有发出警告。
我无法访问Matlab,但我猜它会以不同的方式处理这种情况。
Your (reversed) x array is not increasing (-0.00275 < -0.000935) which is should be to use np.interp1d properly. See the docs. No warning is issued.
I don't have access to Matlab, but I'm guessing that it handles such cases differently.
更多推荐
发布评论