应用于两个列表时,如何使用numpy的polyfit?

时间:2019-08-26 22:45:34

标签: python numpy

y_boxes_1 = [y[i:i + divisor_1] for i in range(0, len(y), divisor_1)]
x_boxes_1 = [x[i:i + divisor_1] for i in range(0, len(x), divisor_1)]

上面的代码将列表除以除数。我想做的是使用numpy polyfit为y和x的每个单独的框创建一个多项式系数的新列表。

如果:

x_boxes_1 = [[1,2,3,4,5,6,7,8],[9,10,11,12,13,14,15,16]] 
y_boxes_1 = [[3,5,2,3,1,2,3,4],[2,3,4,1,5,6,7,10]] 

然后,polyfit将仅使用x_boxes_1 [0]和y_boxes_1 [0]和x_boxes_1 [1]和y_boxes_1 [1]中的值,并使用每个单独计算的系数生成一个新列表。

我该怎么做?

1 个答案:

答案 0 :(得分:1)

据我了解,x_boxes_1保留坐标,而y_boxes_1保留您要拟合多项式的点。并且,您想为每个对应的对呼叫两次polyfit。如果是这样,这应该可行:

import numpy as np
import matplotlib.pyplot as plt

x_boxes_1 = [[1,2,3,4,5,6,7,8],[9,10,11,12,13,14,15,16]] 
y_boxes_1 = [[3,5,2,3,1,2,3,4],[2,3,4,1,5,6,7,10]] 

zipped = zip(x_boxes_1, y_boxes_1)

z_boxes_1 = [np.polyfit(x,y,6) for x,y in zipped]

请注意,拟合多项式的阶数为6。

您可以密谋验证:

xp_boxes_1 = [np.linspace(1, 8, 100), np.linspace(9, 16, 100)]
for i in [0,1]:
    x = x_boxes_1[i]
    y = y_boxes_1[i]
    z = z_boxex_1[i]
    xp = xp_boxes_1[i]
    p = np.poly1d(z)
    plt.subplot(1,2,i+1)
    plt.plot(x, y, '.', xp, p(xp), '-');

enter image description here