How to implement linear interpolation?

后端 未结 7 1348
暗喜
暗喜 2020-11-28 08:16

Say I am given data as follows:

x = [1, 2.5, 3.4, 5.8, 6]
y = [2, 4, 5.8, 4.3, 4]

I want to design a function that will interpolate linearl

7条回答
  •  谎友^
    谎友^ (楼主)
    2020-11-28 08:28

    Your solution did not work in Python 2.7. There was an error while checking for the order of the x elements. I had to change to code to this to get it to work:

    from bisect import bisect_left
    class Interpolate(object):
        def __init__(self, x_list, y_list):
            if any([y - x <= 0 for x, y in zip(x_list, x_list[1:])]):
                raise ValueError("x_list must be in strictly ascending order!")
            x_list = self.x_list = map(float, x_list)
            y_list = self.y_list = map(float, y_list)
            intervals = zip(x_list, x_list[1:], y_list, y_list[1:])
            self.slopes = [(y2 - y1)/(x2 - x1) for x1, x2, y1, y2 in intervals]
        def __getitem__(self, x):
            i = bisect_left(self.x_list, x) - 1
            return self.y_list[i] + self.slopes[i] * (x - self.x_list[i])
    

提交回复
热议问题