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

时间:2015-03-17 05:24:49

标签: python arrays numpy scipy interpolation

我必须使用数组:

线性的;

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。

这总是正确的吗?或者它会因某些情况而崩溃。

1 个答案:

答案 0 :(得分:4)

除非我遗漏了某些内容,否则此案例会要求numpy.interp进行简单的调用。您希望从x预测y,这与人们通常的变量定义相反,但除此之外,您只需要:

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]