Python numpy.correlate(v1,v2, mode) выполняет свертку массива v1 с обращением массива v2 и дает результат, обрезанный с использованием одного из трех указанных режимов.
Что такое функция np.correlate() в Python?
Метод numpy.correlate() в Python используется для поиска взаимной перекрестной корреляции между двумя одномерными векторами. Функция np.correlate(), которая вычисляет корреляцию, как обычно определено в тексте с одиночной обработкой, задается как: c_{v1v2} [k] = sum_n v1[n+k] * conj(v2[n]) с последовательностями v1 и v2, при необходимости дополняется нулями, а conj является сопряженным.
Синтаксис
|
1 |
numpy.correlate(v1, v2, mode,old_behaviour) |
Параметры
Функция numpy.correlate() принимает не более четырех параметров:
- v1: array_like, первый одномерный входной массив. Предположим, он имеет форму(M,)
- v2: array_like, второй одномерный входной массив. Предположим, он имеет форму(N,)
- mode: {‘valid’, ‘same’, ‘full’}. Это необязательный параметр, который имеет три различных режима, которые поясняются ниже:
- «valid»: это режим по умолчанию. Режим «действителен» возвращает вывод длины max(M, N) – min(M, N) + 1. Продукт свертки дается только тогда, когда v1 и v2 полностью перекрывают друг друга. Значения вне границы сигнала не влияют.
- «same»: возвращает выходные данные длины min(M, N). Пограничные эффекты все еще видны.
- «full»: это возвращает свертку в каждой точке перекрытия с выходной формой(M + N-1). В конечных точках свертки векторы v1 и v2 не перекрываются полностью, и могут наблюдаться граничные эффекты.
- ‘old_behavior: bool, это логический параметр, который может принимать значения true или false.
В случае, если old_behavoiur принимает значение true из числового значения(correlate(v1, v2) == correct(v2, v1), сопряжение не берется для сложных массивов. В противном случае, если old_behavoiur принимает значение false из числового значения, тогда используется обычное определение обработки сигналов.
Возвращаемое значение
Метод numpy.correlate() возвращает взаимную корреляцию одномерных векторов v1 и v2.
Примеры программ с функцией numpy.correlate()
Пример 1
Программа для демонстрации работы метода numpy.correlate():
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 |
# importing the numpy module import numpy as np # Making fist 1-D vector v1 v1 = np.array([1, 3, 5]) print("First vector sequence is: ", v1) # Making second 1-D vector v2 v2 = np.array([0.5, 1.5, 2.5]) print("Second vector sequence is: ", v2) print("\nprinting cross-correlation result between v1 and v2 using default 'valid' mode:") print(np.correlate(v1, v2)) print("\nprinting cross-correlation result between v1 and v2 using 'full' mode:") print(np.correlate(v1, v2, mode='full')) # printing cross-correlation result between v1 and v2 using 'same' mode print("\nprinting cross-correlation result between v1 and v2 using 'same' mode:") print(np.correlate(v1, v2, mode='same')) |
Выход
|
1 2 3 4 5 6 7 8 9 10 11 |
First vector sequence is: [1 3 5] Second vector sequence is: [0.5 1.5 2.5] printing cross-correlation result between v1 and v2 using default 'valid' mode: [17.5] printing cross-correlation result between v1 and v2 using 'full' mode: [ 2.5 9. 17.5 9. 2.5] printing cross-correlation result between v1 and v2 using 'same' mode: [ 9. 17.5 9. ] |
Объяснение.
Мы взяли два одномерных входных вектора с именами v1 и v2. Затем мы отобразили выходные данные, отобразив значение взаимной корреляции, используя каждый из трех различных режимов.
Пример 2
Посмотрим, как можно использовать метод np.correlate() для получения обращенного во времени комплексно-сопряженного результата, когда мы меняем порядок двух последовательностей:
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 |
import numpy as np # Making fist 1-D vector v1 v1 = np.array([1, 3, 5]) print("First vector sequence is: ", v1) # Making second 1-D vector v2 v2 = np.array([0.5, 1.5, 2.5]) print("Second vector sequence is: ", v2) print("\nprinting cross-correlation result between v1 and v2 using 'full' mode:") print(np.correlate(v1, v2, mode='full')) # Changing order of sequence # printing cross-correlation result between v2 and v1 using 'full' mode print("\nAfter reversing the order of sequence and still using 'full' mode:") print(np.correlate(v2, v1, mode='full')) # printing cross-correlation result between v1 and v2 using 'same' mode print("\nprinting cross-correlation result between v1 and v2 using 'same' mode:") print(np.correlate(v1, v2, mode='same')) # Changing order of sequence # printing cross-correlation result between v2 and v1 using 'same' mode print("\nAfter reversing the order of sequence and still using 'same' mode:") print(np.correlate(v2, v1, mode='same')) |
Выход
|
1 2 3 4 5 6 7 8 9 10 11 |
First vector sequence is: [1 3 5] Second vector sequence is: [0.5 1.5 2.5] printing cross-correlation result between v1 and v2 using default 'valid' mode: [17.5] printing cross-correlation result between v1 and v2 using 'full' mode: [ 2.5 9. 17.5 9. 2.5] printing cross-correlation result between v1 and v2 using 'same' mode: [ 9. 17.5 9. ] |
Объяснение.
После печати результата в исходной последовательности, а затем его печати после изменения порядка последовательности, мы можем убедиться, что метод np.correlate() можно использовать для получения комплексно-сопряженного результата с обращенным временем.
Результат может быть выражен с помощью функции как:
c_{v2v1} [k] = c^{*} {v1v2} [-k].
