使用 python numpy 或 scipy 将线性数组插入非线性数组

interpolate linear array to non linear array using python numpy or scipy

我必须排列:

线性的;

x = array([ 0. ,  0.1,  0.2,  0.3,  0.4,  0.5,  0.6,  0.7,  0.8,  0.9,  1. , 1.1,  1.2,  1.3,  1.4])

以及相应的非线性结果;

y = array([ 13.07,  13.7 ,  14.35,  14.92,  15.5 ,  16.05,  16.56,  17.12,
        17.62,  18.08,  18.55,  19.02,  19.45,  19.88,  20.25])

现在:我想将y转换为线性间隔的数组,并找到x.

对应的插值

即在

时找到 x
y = array([ 13. ,  13.5,  14. ,  14.5,  15. ,  15.5,  16. ,  16.5,  17. , 17.5,  18. ,  18.5,  19. ,  19.5,  20. ])

提前致谢。

我使用numpy中的interp函数使用以下方法:

ynew = np.linspace(np.min(y), np.max(y), len(y))
xnew = np.interp(ynew, y, x)

即在 np.interp 函数中交换 x 和 y。

这总是正确的吗?还是会在某些情况下发生故障。

除非我遗漏了什么,否则这个案例需要简单调用 numpy.interp。您想从 y 预测 x,这与人们通常定义变量的方式相反,但除此之外,您只需要:

import numpy as np
x = np.array([ 0. ,  0.1,  0.2,  0.3,  0.4,  0.5,  0.6,  0.7,  0.8,  0.9,  1. , 1.1,  1.2,  1.3,  1.4])
y = np.array([ 13.07,  13.7 ,  14.35,  14.92,  15.5 ,  16.05,  16.56,  17.12,
        17.62,  18.08,  18.55,  19.02,  19.45,  19.88,  20.25])
ynew = np.array([ 13. ,  13.5,  14. ,  14.5,  15. ,  15.5,  16. ,  16.5,  17. , 17.5,  18. ,  18.5,  19. ,  19.5,  20. ])
xnew = np.interp(ynew, y, x)
print xnew

输出为:

[ 0.          0.06825397  0.14615385  0.22631579  0.3137931   0.4
  0.49090909  0.58823529  0.67857143  0.776       0.8826087   0.9893617
  1.09574468  1.21162791  1.33243243]