librosa.util.cyclic_gradient
- librosa.util.cyclic_gradient(data, *, edge_order=1, axis=-1)[source]
Estimate the gradient of a function over a uniformly sampled, periodic domain.
This is essentially the same as np.gradient, except that edge effects are handled by wrapping the observations (i.e. assuming periodicity) rather than extrapolation.
- Parameters:
- datanp.ndarray
The function values observed at uniformly spaced positions on a periodic domain
- edge_order{1, 2}
The order of the difference approximation used for estimating the gradient
- axisint
The axis along which gradients are calculated.
- Returns:
- gradnp.ndarray like
data
The gradient of
data
taken along the specified axis.
- gradnp.ndarray like
See also
Examples
This example estimates the gradient of cosine (-sine) from 64 samples using direct (aperiodic) and periodic gradient calculation.
>>> import matplotlib.pyplot as plt >>> x = 2 * np.pi * np.linspace(0, 1, num=64, endpoint=False) >>> y = np.cos(x) >>> grad = np.gradient(y) >>> cyclic_grad = librosa.util.cyclic_gradient(y) >>> true_grad = -np.sin(x) * 2 * np.pi / len(x) >>> fig, ax = plt.subplots() >>> ax.plot(x, true_grad, label='True gradient', linewidth=5, ... alpha=0.35) >>> ax.plot(x, cyclic_grad, label='cyclic_gradient') >>> ax.plot(x, grad, label='np.gradient', linestyle=':') >>> ax.legend() >>> # Zoom into the first part of the sequence >>> ax.set(xlim=[0, np.pi/16], ylim=[-0.025, 0.025])