В Scipy есть метод convolve1d() внутри модуля scipy.ndimage, который вычисляет одномерную свертку по указанной оси с предоставленными весами.
Синтаксис:
scipy.ndimage.convolve1d(input, weights, axis=- 1, output=None, mode='reflect', cval=0.1, origin=1)
Где параметры:
- input (array): это данные массива в качестве входных данных.
- Weights (ndarray): это одномерная последовательность чисел.
- axis (int): этот параметр представляет ось данного массива, по которой можно вычислить свертку.
- output (dtype, array): используется для указания типа данных возвращаемого массива в качестве вывода.
- mode(): используется для управления границами входного массива, когда мы хотим расширить его границу. Доступны следующие режимы: перенос, постоянный, ближайший, зеркальный и отраженный.
- cva l(скаляр): используется для заполнения прошлых границ входного массива, когда режим установлен на константу.
- origin (int): используется для помещения фильтра в данный входной массив. Если значение равно нулю, то фильтр помещается в центр. Если значение положительное, поместите фильтр слева, а если значение отрицательное, поместите фильтр справа.
Давайте разберемся на примере, выполнив следующие шаги:
- Импортируйте необходимые библиотеки, используя приведенный ниже код Python.
from scipy import ndimage
- Создайте массив с несколькими значениями и весами, используя приведенный ниже код Python.
a = [4,6,3,5,6,0,9] w = [2,6]
- Теперь передайте созданный выше массив и веса в метод convolve1d.
ndimage.convolve1d(a,weights=w)
Свертка 2d
В Scipy есть метод convolve() в модуле scipy.ndimage, который вычисляет многомерную свертку по указанной оси с предоставленными весами.
Синтаксис:
scipy.ndimage.convolve(input, weights, axis=- 1, output=None, mode='reflect', cval=0.1, origin=1)
Где параметры:
- input (array): это данные массива в качестве входных данных.
- Weights (ndarray): Массив весов должен иметь размерность, равную размерности входного массива.
- axis (dtype, array): используется для указания типа данных возвращаемого массива в качестве вывода.
- mode (): используется для управления границами входного массива, когда мы хотим расширить его границу. Доступны следующие режимы: перенос, постоянный, ближайший, зеркальный и отраженный.
- cval (скаляр): используется для заполнения прошлых границ входного массива, когда режим установлен на константу.
- origin (int): используется для помещения фильтра в данный входной массив. Если значение равно нулю, то фильтр помещается в центр. Если значение положительное, поместите фильтр слева, а если значение отрицательное, поместите фильтр справа.
Давайте разберемся на примере, выполнив следующие шаги:
- Импортируйте необходимые библиотеки, используя приведенный ниже код Python.
from scipy import ndimage import numpy as np
- Создайте двумерный массив с несколькими значениями и весами, используя приведенный ниже код Python.
array_data = np.array([(5,4,6,8),(1,0,7,4)]) weight = np.array([[0,0,1],[1,1,1]])
- Теперь передайте созданный выше двумерный массив и веса в метод свертки.
ndimage.convolve(array_data,weights=weight,cval=0.1,mode='constant')
Свертка 3d
В Scipy есть метод convolve() в модуле scipy.ndimage, который вычисляет многомерную свертку.
Здесь мы будем использовать тот же метод с трехмерным массивом, который мы использовали в предыдущем подразделе.
Синтаксис:
scipy.ndimage.convolve(input, weights, axis=- 1, output=None, mode='reflect', cval=0.1, origin=1)
Где параметры:
- input (array): это данные массива в качестве входных данных.
- Weights (ndarray): Массив весов должен иметь размерность, равную размерности входного массива.
- axis (dtype, array): используется для указания типа данных возвращаемого массива в качестве вывода.
- mode(): используется для управления границами входного массива, когда мы хотим расширить его границу. Доступны следующие режимы: перенос, постоянный, ближайший, зеркальный и отраженный.
- cval (скаляр): используется для заполнения прошлых границ входного массива, когда режим установлен на константу.
- origin (int): используется для помещения фильтра в данный входной массив. Если значение равно нулю, то фильтр помещается в центр. Если значение положительное, поместите фильтр слева, а если значение отрицательное, поместите фильтр справа.
Давайте разберемся на примере, выполнив следующие шаги:
- Импортируйте необходимые библиотеки, используя приведенный ниже код Python.
from scipy import ndimage import numpy as np
- Создайте трехмерный массив с несколькими значениями и весами, используя приведенный ниже код.
array_data = np.array([[[3,18], [46, 80]], [[0, 0], [62, 86]],[[86,34],[22,19]]]) weight = np.array([[[0,0,1],[1,1,1],[0,1,0]]])
- Теперь передайте созданный выше трехмерный массив и веса в метод свертки.
ndimage.convolve(array_data,weights=weight,cval=0.1,mode='constant')
Метод fftconvolve()
В Scipy есть метод fftconvolve() в модуле scipy.signal, который свертывает n-мерный массив с использованием метода FFT (быстрое преобразование Фурье).
Синтаксис: приведен ниже.
scipy.signal.fftconvolve(in1, in2, mode='full', method='auto')
Где параметры:
- in1 (array_data): используется для ввода первого сигнала в виде массива.
- in2 (array_data): используется для ввода второго сигнала в виде массива, размерность которого должна быть такой же, как у первого входного массива.
- mode: используется для указания строки, определяющей размер вывода. Режим может быть одинаковым, полным и действительным.
- method: используется для указания метода, который вычисляет свертку. Метод может быть автоматическим, прямым и FFT.
Давайте разберемся на примере, выполнив следующие шаги:
- Импортируйте необходимую библиотеку, используя приведенный ниже код Python.
from scipy.signal import fftconvolve import scipy.signal import numpy as np import matplotlib.pyplot as plt %matplotlib inline
- Сгенерируйте сигнал случайного шума и примените метод fftconvolveI(), используя приведенный ниже код.
random_gen = np.random.default_rng() s = random_gen.standard_normal(800) autocorrelation = fftconvolve(s, s[::-1], mode='full')
- Давайте построим свернутый выше сигнал, используя приведенный ниже код.
fig,(orig_axes, mag_axes) = plt.subplots(2, 1) orig_axes.plot(s) orig_axes.set_title('It is noise') mag_axes.plot(np.arange(-len(s)+1,len(s)), autocorrelation) mag_axes.set_title('It is autocorrelation') fig.tight_layout() fig.show()
Метод gaussian_filter
В Scipy есть метод gaussian_filter внутри модуля scipy.ndimage, который применяет гауссово значение к многомерному массиву.
Синтаксис:
scipy.ndimage.gaussian_filter(input, sigma, order=0, output=int, mode='nerest', cval=1.1, truncate=3.1)
Где параметры:
- input (array_data): это данные массива в качестве входных данных.
- sigma (последовательность скаляров): стандартное отклонение ядра Гаусса.
- order (int): используется для указания порядка фильтра.
- output (dtype, array): используется для указания типа данных возвращаемого массива в качестве вывода.
- mode(): используется для управления границами данного массива в качестве входных данных, когда мы хотим расширить его границу. Доступны следующие режимы: перенос, постоянный, ближайший, зеркальный и отраженный.
- cval(скаляр): используется для заполнения прошлых ребер данного массива в качестве входных данных, когда режим установлен на константу.
Метод gaussian_filter возвращает gaussian_filter типа ndarray.
Давайте разберемся на примере, выполнив следующие шаги:
- Импортируйте необходимые библиотеки, используя приведенный ниже код Python.
from scipy.ndimage import gaussian_filter import numpy as np
- Создайте массив, содержащий значения, используя приведенный ниже код.
array_data = np.arange(100, step=4).reshape((5,5)) array_data
- Теперь примените фильтр Гаусса к данным массива, используя приведенный ниже код.
gaussian_filter(array_data, sigma=1)
Метод convolve1d()
Здесь мы будем использовать тот же метод convolve1d() Scipy для свертки данного массива по указанной оси.
Давайте рассмотрим пример, выполнив следующие шаги:
- Импортируйте необходимые библиотеки, используя приведенный ниже код Python.
from scipy import ndimage import numpy as np
- Создайте двумерный массив с несколькими значениями и весами, используя приведенный ниже код Python.
array_data = np.array([(4,5,8,6),(0,1,4,7)]) weight = [0,1,1]
- Передайте созданный выше двумерный массив и веса в метод свертки без указания параметров оси.
ndimage.convolve1d(array_data,weights=weight)
- Снова запустите приведенный выше код с осью, равной 0, используя приведенный ниже код.
ndimage.convolve1d(array_data,weights=weight,axis=0)
Ядро
Веса представляют собой группу значений, называемую ядром в свертке, которая скользит по заданному массиву в качестве входных данных для преобразования этих данных. Здесь мы будем использовать тот же метод Scipy convolve(), который мы изучили в предыдущем подразделе.
Давайте разберемся на примере, выполнив следующие шаги:
- Импортируйте необходимые библиотеки, используя приведенный ниже код Python.
from scipy import ndimage import numpy as np
- Создайте двумерный массив с несколькими значениями и весами или ядрами, используя приведенный ниже код.
array_data = np.array([(1,4,8,6),(4,7,0,4)]) kernel = np.array([[1,0,1],[1,1,0]])
- Передайте созданный выше двумерный массив и ядро в метод convolve и посмотрите результат.
ndimage.convolve(array_data,weights=kernel)
- Создайте новое ядро, используя приведенный ниже код.
kernel_2 = np.array([[0,0,1],[0,1,1]])
- Снова передайте новое ядро методу и посмотрите результат, используя приведенный ниже код.
ndimage.convolve(array_data,weights=kernel_2)