np.polynomial.polynomial.polyfit не соответствует данным в Python - PullRequest
0 голосов
/ 10 сентября 2018

Я пытаюсь выполнить простую линейную подгонку к 373 точкам данных, но полифит, похоже, дает сбой, и я не уверен, почему.

x = np.reshape(air_sst_new[:,90,180],(373))
y = np.reshape(olr_new[:,90,180],(373))

z = np.polynomial.polynomial.polyfit(x,y,1)

plt.figure()
plt.plot(x,y, '.')
xx = np.linspace(np.min(x),np.max(x))
yy = np.polynomial.polynomial.polyval(xx, z)
plt.plot(xx, yy)

График с указанием исходных данных и подгонки

Код, написанный выше, работает при использовании случайно сгенерированных точек, что разочаровывает.

example_x = np.random.rand(373,180,360)
example_y = np.random.rand(373,180,360)

x = np.reshape(example_x[:,90,180], (373))
y = np.reshape(example_y[:,90,180], (373))

z = np.polynomial.polynomial.polyfit(x,y,1)

plt.figure()
plt.plot(x,y, '.')
xx = np.linspace(np.min(x), np.max(x))
yy = np.polynomial.polynomial.polyval(xx, z)
plt.plot(xx, yy)

График, показывающий случайно сгенерированные данные и правильное соответствие

1 Ответ

0 голосов
/ 10 сентября 2018

Проблема заключается в порядке аргументов в вашем polyval. z - это ваш массив коэффициентов линейного соответствия, а xx - это уточненная сетка для построения графика соответствия.

Вы использовали:

z = np.polynomial.polynomial.polyfit(x,y,1)
yy = np.polynomial.polynomial.polyval(xx, z)

Вы должны использовать:

z = np.polyfit(x,y,1)
yy = np.polyval(z, xx)

Подробнее см. В официальных документах здесь .

...