Multidimensional convolution.
The array is convolved with the given kernel.
Parameters ---------- input : array_like The input array. weights : array_like Array of weights, same number of dimensions as input output : array or dtype, optional The array in which to place the output, or the dtype of the returned array. By default an array of the same dtype as input will be created. mode : str or sequence, optional The `mode` parameter determines how the input array is extended when the filter overlaps a border. By passing a sequence of modes with length equal to the number of dimensions of the input array, different modes can be specified along each axis. Default value is 'reflect'. The valid values and their behavior is as follows:
'reflect' (`d c b a | a b c d | d c b a`) The input is extended by reflecting about the edge of the last pixel.
'constant' (`k k k k | a b c d | k k k k`) The input is extended by filling all values beyond the edge with the same constant value, defined by the `cval` parameter.
'nearest' (`a a a a | a b c d | d d d d`) The input is extended by replicating the last pixel.
'mirror' (`d c b | a b c d | c b a`) The input is extended by reflecting about the center of the last pixel.
'wrap' (`a b c d | a b c d | a b c d`) The input is extended by wrapping around to the opposite edge. cval : scalar, optional Value to fill past edges of input if `mode` is 'constant'. Default is 0.0 origin : int or sequence, optional Controls the placement of the filter on the input array's pixels. A value of 0 (the default) centers the filter over the pixel, with positive values shifting the filter to the left, and negative ones to the right. By passing a sequence of origins with length equal to the number of dimensions of the input array, different shifts can be specified along each axis.
Returns ------- result : ndarray The result of convolution of `input` with `weights`.
See Also -------- correlate : Correlate an image with a kernel.
Notes ----- Each value in result is :math:`C_i = \sum_jI_{i+k-j
W_j
}
`, where W is the `weights` kernel, j is the n-D spatial index over :math:`W`, I is the `input` and k is the coordinate of the center of W, specified by `origin` in the input parameters.
Examples -------- Perhaps the simplest case to understand is ``mode='constant', cval=0.0``, because in this case borders (i.e. where the `weights` kernel, centered on any one value, extends beyond an edge of `input`) are treated as zeros.
>>> a = np.array([1, 2, 0, 0],
... [5, 3, 0, 4],
... [0, 0, 0, 7],
... [9, 3, 0, 0]
) >>> k = np.array([1,1,1],[1,1,0],[1,0,0]
) >>> from scipy import ndimage >>> ndimage.convolve(a, k, mode='constant', cval=0.0) array([11, 10, 7, 4],
[10, 3, 11, 11],
[15, 12, 14, 7],
[12, 3, 7, 0]
)
Setting ``cval=1.0`` is equivalent to padding the outer edge of `input` with 1.0's (and then extracting only the original region of the result).
>>> ndimage.convolve(a, k, mode='constant', cval=1.0) array([13, 11, 8, 7],
[11, 3, 11, 14],
[16, 12, 14, 10],
[15, 6, 10, 5]
)
With ``mode='reflect'`` (the default), outer values are reflected at the edge of `input` to fill in missing values.
>>> b = np.array([2, 0, 0],
... [1, 0, 0],
... [0, 0, 0]
) >>> k = np.array([0,1,0], [0,1,0], [0,1,0]
) >>> ndimage.convolve(b, k, mode='reflect') array([5, 0, 0],
[3, 0, 0],
[1, 0, 0]
)
This includes diagonally at the corners.
>>> k = np.array([1,0,0],[0,1,0],[0,0,1]
) >>> ndimage.convolve(b, k) array([4, 2, 0],
[3, 2, 0],
[1, 1, 0]
)
With ``mode='nearest'``, the single nearest value in to an edge in `input` is repeated as many times as needed to match the overlapping `weights`.
>>> c = np.array([2, 0, 1],
... [1, 0, 0],
... [0, 0, 0]
) >>> k = np.array([0, 1, 0],
... [0, 1, 0],
... [0, 1, 0],
... [0, 1, 0],
... [0, 1, 0]
) >>> ndimage.convolve(c, k, mode='nearest') array([7, 0, 3],
[5, 0, 2],
[3, 0, 1]
)