Instantly share code, notes, and snippets.

# kashefy/conv2d.py Created Jan 13, 2016

2d convolution using numpy
 ''' Created on Jul 13, 2015 @author: kashefy ''' import numpy as np from scipy import signal if __name__ == '__main__': x = np.array([[1, 1, 1, 0, 0], [0, 1, 1, 1, 0], [0, 0, 1, 1, 1], [0, 0, 1, 1, 0], [0, 1, 1, 0, 0]], dtype='float') w_k = np.array([[1, 0, 1], [0, 1, 0], [1, 0, 1],], dtype='float') w_k = np.rot90(w_k, 2) print x.shape, w_k.shape f = signal.convolve2d(x, w_k, 'valid') print f weights = np.random.randn() pass

### Multihuntr commented Jan 23, 2018

 Hello random person, I am random person from the interwebs. This gist was the second result on Google for 'numpy 2D convolution' for me. I have a random person request; can you retitle your gist "2D Convolution with Scipy"? Most people have numpy installed with python, but scipy is more specialised and requires deliberate installation.

### sherwoac commented Feb 6, 2018

 Agreed, I landed here hoping for numpy, not scipy.

### robertlugg commented Feb 14, 2018

 I haven't evaluated, but you might consider this https://stackoverflow.com/a/42579291/2184122

### Foadsf commented Aug 10, 2018

 Hey guys, I'm also trying to implement the convolution of arbitrary shaped ndarrays in NumPy here you may wanna take a look.

### shubhMaheshwari commented Aug 28, 2018

 I feel this is a much-optimized approach to the problem https://stackoverflow.com/questions/43086557/convolve2d-just-by-using-numpy def filter(im, fil): # Get the shape of the 4d array view_shape = tuple(np.subtract(im.shape, fil.shape) + 1) + fil.shape strd = np.lib.stride_tricks.as_strided # Get the new view of the array as required subM = strd(im, shape = view_shape, strides = im.strides * 2) # for every i,j element in filter multiply with 2d array ( of subM # and return thier sum return np.einsum('ij,ijkl->kl',fil,subM.T).T filter(x, np.rot90(w_k,2)