def __init__(self, n, axis, order=3, mode='valid'):
"""
Construct a second-order gradient operator for signal of dimension
*n* for dimension *axis*. Use a filter kernel of length
*order* (must be odd). Use convolution type *mode*.
"""
# assert that the filter length is odd
assert(order % 2 == 1)
self.n = n
self.ndim = len(self.n)
self.axis = axis
if axis < 0 or axis >= self.ndim:
raise ValueError('0 <= axis (= {0}) < ndim = {1}'.format(axis, self.ndim))
self.d = differentiator(int(order/2) + 1)
self.d2 = NP.convolve(self.d, self.d)
self.mode = mode
h_list = []
m = []
for i in reversed(range(self.ndim)):
if i == axis:
h_list.append(self.d2)
else:
h_list.append(NP.array([1]))
m.append(len(h_list[-1]))
self.m = m
if mode == 'circ':
n_prime = array(n) - m + 1
super(Gradient2Filter, self).__init__(n_prime, h_list, mode=mode)
else:
super(Gradient2Filter, self).__init__(n, h_list, mode=mode)
评论列表
文章目录