Код: Выделить всё
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
Конфигурация моего компьютера:
Операционная система: Windows 11
ЦП: i7-12700F
Память: 16 ГБ
I уже использовали из импорта concurrent.futures ThreadPoolExecutor, as_completed для ускорения выполнения нескольких циклов. Я ищу дополнительные способы ускорить эти вычисления.
Есть ли какие-либо другие предложения по оптимизации алгоритма, которые могли бы помочь сократить время вычислений? Спасибо.
Подробнее здесь: https://stackoverflow.com/questions/793 ... -in-python