Numpy / Scipy несколько 2D сверток одновременно с различными ядрами в одном наборе данных - PullRequest
0 голосов
/ 18 февраля 2020

У меня есть изображение, и я хотел бы вычислить несколько сверток на нем с разными ядрами. Минимальный рабочий пример:

from scipy import signal
import numpy as np

kernels = np.zeros((8,9))
kernels[:,4] = 1
for i in range(len(kernels)):
    kernels[i,np.floor(i*5/4).astype(int)] = -1
kernels = kernels.reshape((8,3,3))

A = np.array([[0,0,0,0,0],[0,0,0,0,0],[0,0,1,0,0],[0,0,0,0,0],[0,0,0,0,0]])

np.array([signal.convolve2d(A,kernels[i],'same') for i in range(8)])

, который возвращает массив, содержащий все (в данном случае 8) свертки. Поскольку ни numpy, ни scipy не принимают 3d-ядра для 2-й свертки, я не вижу более приятного способа, кроме описанного выше :(

Поскольку я пытаюсь оптимизировать функцию с помощью numba, я хотел бы свести к минимуму "python" - часть кода, и хотелось бы знать, есть ли numpy -й способ сделать это, предпочтительно в виде как можно меньших вызовов numpy: D

С уважением,

Спасибо

...