detrend#
- scipy.signal.detrend(данные, ось=-1, тип='linear', bp=0, overwrite_data=False)[источник]#
Удалить линейный или постоянный тренд вдоль оси из данных.
- Параметры:
- данныеarray_like
Входные данные.
- осьint, необязательный
Ось, вдоль которой производится удаление тренда данных. По умолчанию это последняя ось (-1).
- тип{‘linear’, ‘constant’}, опционально
Тип удаления тренда. Если
type == 'linear'(по умолчанию), результат линейной аппроксимации методом наименьших квадратов для данные вычитается из данные. Еслиtype == 'constant', только среднее значение данные вычитается.- bparray_like из целых чисел, необязательно
Последовательность точек разрыва. Если задана, выполняется индивидуальная линейная аппроксимация для каждой части данные между двумя точками разрыва. Точки разрыва задаются как индексы в данныеЭтот параметр имеет эффект только при
type == 'linear'.- overwrite_databool, необязательно
Если True, выполнить детрендирование на месте и избежать копирования. По умолчанию False
- Возвращает:
- retndarray
Очищенные от тренда входные данные.
Смотрите также
numpy.polynomial.polynomial.Polynomial.fitСоздать полином, аппроксимирующий методом наименьших квадратов.
Примечания
Детрендирование можно интерпретировать как вычитание полинома, аппроксимированного методом наименьших квадратов: установка параметра тип в ‘constant’ соответствует подгонке полинома нулевой степени, ‘linear’ — полинома первой степени. Обратитесь к примеру ниже.
Примеры
Следующий пример удаляет тренд из функции \(x(t) = \sin(\pi t) + 1/4\):
>>> import matplotlib.pyplot as plt >>> import numpy as np >>> from scipy.signal import detrend ... >>> t = np.linspace(-0.5, 0.5, 21) >>> x = np.sin(np.pi*t) + 1/4 ... >>> x_d_const = detrend(x, type='constant') >>> x_d_linear = detrend(x, type='linear') ... >>> fig1, ax1 = plt.subplots() >>> ax1.set_title(r"Detrending $x(t)=\sin(\pi t) + 1/4$") >>> ax1.set(xlabel="t", ylabel="$x(t)$", xlim=(t[0], t[-1])) >>> ax1.axhline(y=0, color='black', linewidth=.5) >>> ax1.axvline(x=0, color='black', linewidth=.5) >>> ax1.plot(t, x, 'C0.-', label="No detrending") >>> ax1.plot(t, x_d_const, 'C1x-', label="type='constant'") >>> ax1.plot(t, x_d_linear, 'C2+-', label="type='linear'") >>> ax1.legend() >>> plt.show()
В качестве альтернативы, NumPy
Polynomialможет использоваться для удаления тренда:>>> pp0 = np.polynomial.Polynomial.fit(t, x, deg=0) # fit degree 0 polynomial >>> np.allclose(x_d_const, x - pp0(t)) # compare with constant detrend True >>> pp1 = np.polynomial.Polynomial.fit(t, x, deg=1) # fit degree 1 polynomial >>> np.allclose(x_d_linear, x - pp1(t)) # compare with linear detrend True
Обратите внимание, что
Polynomialтакже позволяет подгонять полиномы более высокой степени. Обратитесь к его документации, чтобы узнать, как извлечь коэффициенты полинома.