- numpy - scipy - pandas - matplotlib - scikit-image - scikit-learn import numpy as np arr1 = [1,2,3,4] arr2 = [5,6,7,8] #arr2 = [1,1,1] print("convolved:", np.convolve(arr1, arr2)) outer = np.outer(arr1, arr2) print("outer:\n", outer) outerFlipped = np.fliplr(outer) print(np.trace(outerFlipped, 0)) #primary diagonal #np.trace(outerFlipped, 1) # convolve using traces convolveTrace = [np.trace(np.fliplr(outer), i) for i in range(-4,4)] print("convolveTrace:\n", convolveTrace) # convolve using diagonal sums np.sum(np.diag(np.fliplr(outer), -4)) """ # equivalent means of doing convolution (arr1, arr2) |> np.convolve # outer product, flip left to right, diag and then sum (arr1, arr2) |> np.outer |> np.fliplr |> np.diag(, -len to len) |> np.sum # trace gives the same thing as diag and then sum (arr1, arr2) |> np.outer |> np.fliplr |> np.trace(, -len to len) # explicitly form array of diagonal elements as a matrix, and take row sums (arr1, arr2) |> np.outer |> np.fliplr |> diags = [np.pad(np.diag(outerFlip, i), (0, abs(i))) for i in range(-4,4)] |> np.concatenate(diags).reshape(8,4) |> np.sum(diagsArr, 1) """ import numpy as np arr1 = [1,2,3,4] arr2 = [5,6,7,8] outerFlip = np.fliplr(np.outer(arr1, arr2)) # np.diag(outerFlip, 0) diags = [np.pad(np.diag(outerFlip, i), (0,abs(i))) for i in range(-4,4)] #np.sum(diags, 1) diagsArr = np.concatenate(diags).reshape(8,4) np.sum(diagsArr, 1)