使用 Python Numpy 或 SciPy 将线性数组插值为非线性数组



I 必须数组:

线性的;

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]

最新更新