84055


Yの任意の値に対して線形補間を行い下のデータにない値でもXの値が返ってくるようにしたいです。  
例えばYが0.3のときのXの値を求める。

[code]

    X=[0.01 0.1  0.5  1.   2.   3.   4.   5.   6.   7.  ]
    Y=[0.043675 0.041689 0.033546 0.027305 0.020843 0.016325 0.014061 0.012296　0.011067 0.010214]
    
[/code]

以下の画像は上のデータをプロットしたものです。

[![](https://i.stack.imgur.com/9mPhU.png)](https://i.stack.imgur.com/9mPhU.png)

①は画像を出力したコードです。  
②は自分なりに調べて補間を行いましたが、求めたい結果をうまく得ることができませんでした。

①

[code]

    plt.scatter(LAI,toc_red)
    plt.plot(LAI,toc_red)
    plt.xlabel("X")
    plt.ylabel('Y')
    
[/code]

②

[code]

    x_latent = np.linspace(min(LAI), max(LAI), 100)
    from scipy import interpolate
    ip= ["線形補間", interpolate.interp1d]
    
    for method_name, method in [ip]:
        print(method_name)
        fitted_curve = method(LAI, toc_red)
        plt.scatter(LAI, toc_red, label="observed")
        plt.plot(x_latent, fitted_curve(x_latent), c="red", label="fitted")
        plt.grid()
        plt.legend()
        plt.show()
    
[/code]


CC BY-SA 4.0
2021-12-08T11:33:36.153
84029
2021-12-10T15:15:47.563
2021-12-08T11:52:58.047
3060
49412
question
python python3
データの補間を行って対応する値を出力したい


scipyの`interpolate.interp1d`が正に解決方法です。  
線形補間した新たな関数`f_1d`を作成し、`y=f_1d(x)`のようにして補間値を求めます。

[code]

    from scipy.interpolate import interp1d
    
    X = [0.01, 0.1, 0.5, 1., 2., 3., 4., 5., 6., 7., ]
    Y = [0.043675, 0.041689, 0.033546, 0.027305, 0.020843, 0.016325, 0.014061, 0.012296, 0.011067, 0.010214]
    
    f_1d = interp1d(X, Y)
    y = f_1d(0.3)
    print(float(y))
    # => 0.0376175
    
[/code]


CC BY-SA 4.0
2021-12-10T15:15:47.563
84055
2021-12-10T15:15:47.563
35754
84029
answer