Интерполяция в менее плотную сетку подгонка по методу наименьших квадратов в Python

#python #multidimensional-array #interpolation #least-squares

#python #многомерный массив #интерполяция #наименьшие квадраты

Вопрос:

Я новичок в Python и немного смущен интерполяцией и подгонкой по методу наименьших квадратов двух ndarrays.

У меня есть 2 ndarrays:

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:

Ваша путаница, похоже, связана с путаницей методов, которые вы упоминаете. Метод наименьших квадратов — это не метод интерполяции, скорее это метод подгонки кривой минимизации. Одним из ключевых отличий является то, что при интерполяции графики всегда проходят через исходные точки данных. С наименьшими квадратами это может произойти, но обычно это не так.

Интерполяция кубического сплайна даст вам «хорошие» графики, если вам нужно пройти через исходные точки данных.

Если вы хотите использовать метод наименьших квадратов, вам нужно знать, полином какой степени вы хотите подгонять. Наиболее распространенным является линейный (первого порядка).