На этот раз я опустил «Специальный конв». Для более широкой области "просмотр в режиме просмотра" превосходит БПФ, и на последних участках видно, что разница приближается к 100%. Вероятно, потому что с ростом шага подход FFT будет иметь больше потраченных впустую чисел, поэтому «просмотр шага» получает больше преимуществ для маленьких и больших ядер.

ытался реализовать пошаговую свертку двумерного массива, используя цикл for, т.е.

arr = np.array([[2,3,7,4,6,2,9],
                [6,6,9,8,7,4,3],
                [3,4,8,3,8,9,7],
                [7,8,3,6,6,3,4],
                [4,2,1,8,3,4,6],
                [3,2,4,1,9,8,3],
                [0,1,3,9,2,1,4]])

arr2 = np.array([[3,4,4],
                 [1,0,2],
                 [-1,0,3]])

def stride_conv(arr1,arr2,s,p):
    beg = 0
    end = arr2.shape[0]
    final = []
    for i in range(0,arr1.shape[0]-1,s):
        k = []
        for j in range(0,arr1.shape[0]-1,s):
            k.append(np.sum(arr1[beg+i : end+i, beg+j:end+j] * (arr2)))
        final.append(k)

    return np.array(final)

stride_conv(arr,arr2,2,0)

В результате получается массив 3 * 3:

array([[ 91, 100,  88],
       [ 69,  91, 117],
       [ 44,  72,  74]])

Есть ли функция numpy или функция scipy, чтобы сделать то же самое? Мой подход не так хорош. Как я могу векторизовать это?

Ответы на вопрос(4)

Ваш ответ на вопрос