#python #multidimensional-array #interpolation #least-squares
#python #многомерный массив #интерполяция #наименьшие квадраты
Вопрос:
Я новичок в Python и немного смущен интерполяцией и подгонкой по методу наименьших квадратов двух ndarrays.
У меня есть 2 ndarrays:
Моя конечная цель — сделать подгонку методом наименьших квадратов смоделированного спектра (синяя кривая) к наблюдаемому спектру (оранжевая кривая).
Ndarray с синей кривой имеет следующие параметры:
Ndarray оранжевой кривой имеет следующие параметры:
В качестве первого и самого простого шага я хотел отобразить остатки (разницу) между этими двумя ndarrays, но проблема в том, что, поскольку они имеют разные размеры 391 и 256 соответственно. Я пытался использовать numpy.reshape
ndarray.resphape
функции or, но они приводят к ошибкам.
Вероятно, правильным решением будет начать с интерполяции синей кривой в менее плотную сетку оранжевой кривой. Я пытался использовать numpy.interp
функцию, но это также приводит к ошибкам.
Ответ №1:
Что-то вроде следующего:
import numpy as np
import matplotlib.pyplot as plt
n_denser = 33
n_coarser = 7
x_denser = np.linspace(0,1,n_denser)
y_denser = np.power(x_denser, 2) np.random.randn(n_denser)/10.
x_coarser = np.linspace(0,1,n_coarser)
y_coarser = np.power(x_coarser, 2) np.random.randn(n_coarser)/10. 0.5
y_dense_interp = np.interp(x_coarser, x_denser, y_denser)
plt.plot(x_denser, y_denser, 'b -')
plt.plot(x_coarser, y_coarser, 'ro:')
plt.plot(x_coarser, y_dense_interp, 'go')
plt.legend(['dense data', 'coarse data', 'interp data'])
plt.show()
Ответ №2:
Ваша путаница, похоже, связана с путаницей методов, которые вы упоминаете. Метод наименьших квадратов — это не метод интерполяции, скорее это метод подгонки кривой минимизации. Одним из ключевых отличий является то, что при интерполяции графики всегда проходят через исходные точки данных. С наименьшими квадратами это может произойти, но обычно это не так.
Интерполяция кубического сплайна даст вам «хорошие» графики, если вам нужно пройти через исходные точки данных.
Если вы хотите использовать метод наименьших квадратов, вам нужно знать, полином какой степени вы хотите подгонять. Наиболее распространенным является линейный (первого порядка).