Если вашей целью является векторизация полифита, то да, это можно сделать, но требует переписать np.polyfit
вручную.К счастью, он может быть построен поверх np.linalg.lstsq
и полиномиальной расчетной матрицы , предоставленной np.vander
.В общем, процедура выглядит следующим образом:
import numpy as np
def fit_many(x, y, order=2):
'''
arguments:
x: [N]
y: [N x S]
where:
N - # of measurements per pixel
S - # pixels
returns [`order` x S]
'''
A = np.vander(x, N=order)
return np.linalg.lstsq(A, y, rcond=None)[0]
И может использоваться, как показано ниже
# measurement x values. I suppose those are your reflectances?
x = np.array([0, 1, 2])
y = np.array([ # a row per pixel
[-1, 0.2, 0.9],
[-.9, 0.1, 1.2],
]).T
params = fit_many(x, y)
import matplotlib.pyplot as plt
poly1 = np.poly1d(params[:, 0])
poly2 = np.poly1d(params[:, 1])
plt.plot(x, y[:, 0], 'bo')
plt.plot(x, poly1(x), 'b-')
plt.plot(x, y[:, 1], 'ro')
plt.plot(x, poly2(x), 'r-')
plt.show()
Имейте в виду, np.linalg.lstsq
не допускает размеры выше двух, так что вам придется преобразовать 2-мерное изображение в сплющенную версию, подогнать и преобразовать обратно.