Как ускорить вычисление взаимной корреляции двух 2D-матриц в Python?Python

Программы на Python
Ответить Пред. темаСлед. тема
Anonymous
 Как ускорить вычисление взаимной корреляции двух 2D-матриц в Python?

Сообщение Anonymous »

Я использую Python для вычисления взаимной корреляции двух двумерных матриц и реализовал три разных метода. Ниже приведен мой экспериментальный код с указанием времени его выполнения:

Код: Выделить всё

import numpy as np
from scipy.signal import fftconvolve

# Randomly generate 2D matrices
a = np.random.randn(64, 4200)
b = np.random.randn(64, 4200)

# Using np.correlate
def test_1(a, b):
return np.array([np.correlate(s_row, t_row, mode="full") for s_row, t_row in zip(a, b)])[:, len(a[0]) - 1:].sum(axis=0)

# Using scipy.signal.fftconvolve
def test_2(a, b):
return np.array([fftconvolve(s_row, t_row[::-1], mode="full") for s_row, t_row in zip(a, b)])[:, len(a[0]) - 1:].sum(axis=0)

# Using scipy.signal.fftconvolve but for 2D
def test_3(a, b):
return fftconvolve(a, np.fliplr(b), mode="full")[:, len(a[0]) - 1:].sum(axis=0)

# Performance testing
for i in range(100):
x = test_1(a, b)  # 19.8 seconds
for i in range(100):
x = test_2(a, b)  # 1.1 seconds
for i in range(100):
x = test_3(a, b)  # 3.8 seconds
Даже если я переверну b в расширенном режиме, стоимость времени останется неизменной.
Конфигурация моего компьютера:
Операционная система: Windows 11
ЦП: i7-12700F
Память: 16 ГБ
I уже использовали из импорта concurrent.futures ThreadPoolExecutor, as_completed для ускорения выполнения нескольких циклов. Я ищу дополнительные способы ускорить эти вычисления.
Есть ли какие-либо другие предложения по оптимизации алгоритма, которые могли бы помочь сократить время вычислений? Спасибо.

Подробнее здесь: https://stackoverflow.com/questions/793 ... -in-python
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «Python»