Secure your code as it's written. Use Snyk Code to scan source code in minutes - no build needed - and fix issues immediately.
def plot_itakura(n_timestamps_1, n_timestamps_2, max_slope=1., ax=None):
"""Plot Itakura parallelogram."""
region = itakura_parallelogram(n_timestamps_1, n_timestamps_2, max_slope)
max_slope, min_slope = _get_itakura_slopes(
n_timestamps_1, n_timestamps_2, max_slope)
mask = np.zeros((n_timestamps_2, n_timestamps_1))
for i, (j, k) in enumerate(region.T):
mask[j:k, i] = 1.
plt.imshow(mask, origin='lower', cmap='Wistia')
sz = max(n_timestamps_1, n_timestamps_2)
x = np.arange(-1, sz + 1)
low_max_line = ((n_timestamps_2 - 1) - max_slope * (n_timestamps_1 - 1)) +\
max_slope * np.arange(-1, sz + 1)
up_min_line = ((n_timestamps_2 - 1) - min_slope * (n_timestamps_1 - 1)) +\
min_slope * np.arange(-1, sz + 1)
diag = (n_timestamps_2 - 1) / (n_timestamps_1 - 1) * np.arange(-1, sz + 1)
window_size = 0.1
else:
window_size = self.metric_params['window_size']
region = sakoe_chiba_band(n_timestamps,
window_size=window_size)
self._clf = SklearnKNN(
n_neighbors=self.n_neighbors, weights=self.weights,
algorithm='brute', metric=_dtw_region,
metric_params={'region': region},
n_jobs=self.n_jobs, **self.kwargs
)
elif self.metric == 'dtw_itakura':
n_timestamps = X.shape[1]
if self.metric_params is None:
region = itakura_parallelogram(n_timestamps)
else:
if 'max_slope' not in self.metric_params.keys():
max_slope = 2.
else:
max_slope = self.metric_params['max_slope']
region = itakura_parallelogram(n_timestamps,
max_slope=max_slope)
self._clf = SklearnKNN(
n_neighbors=self.n_neighbors, weights=self.weights,
algorithm='brute', metric=_dtw_region,
metric_params={'region': region},
n_jobs=self.n_jobs, **self.kwargs
)
elif self.metric == 'dtw_multiscale':
self._clf = SklearnKNN(
n_neighbors=self.n_neighbors, weights=self.weights,
algorithm='brute', metric=_dtw_region,
metric_params={'region': region},
n_jobs=self.n_jobs, **self.kwargs
)
elif self.metric == 'dtw_itakura':
n_timestamps = X.shape[1]
if self.metric_params is None:
region = itakura_parallelogram(n_timestamps)
else:
if 'max_slope' not in self.metric_params.keys():
max_slope = 2.
else:
max_slope = self.metric_params['max_slope']
region = itakura_parallelogram(n_timestamps,
max_slope=max_slope)
self._clf = SklearnKNN(
n_neighbors=self.n_neighbors, weights=self.weights,
algorithm='brute', metric=_dtw_region,
metric_params={'region': region},
n_jobs=self.n_jobs, **self.kwargs
)
elif self.metric == 'dtw_multiscale':
self._clf = SklearnKNN(
n_neighbors=self.n_neighbors, weights=self.weights,
algorithm='brute', metric=_dtw_multiscale,
metric_params=self.metric_params,
n_jobs=self.n_jobs, **self.kwargs
)
plt.subplot(2, 2, 2)
plt.pcolor(timestamps_1, timestamps_2, matrix_sakoechiba.T,
edgecolors='k', cmap='Greys')
plt.xlabel('x', fontsize=12)
plt.ylabel('y', fontsize=12)
plt.title("{0}\nDTW(x, y) = {1:.2f}".format('sakoechiba', dtw_sakoechiba),
fontsize=14)
# Dynamic Time Warping: itakura
slope = 1.2
dtw_itakura, path_itakura = dtw(
x, y, dist='square', method='itakura',
options={'max_slope': slope}, return_path=True
)
parallelogram = itakura_parallelogram(n_timestamps_1, n_timestamps_2,
max_slope=slope)
matrix_itakura = np.zeros((n_timestamps_1 + 1, n_timestamps_2 + 1))
for i in range(n_timestamps_1):
matrix_itakura[i, np.arange(*parallelogram[:, i])] = 0.5
matrix_itakura[tuple(path_itakura)] = 1.
plt.subplot(2, 2, 3)
plt.pcolor(timestamps_1, timestamps_2, matrix_itakura.T,
edgecolors='k', cmap='Greys')
plt.xlabel('x', fontsize=12)
plt.ylabel('y', fontsize=12)
plt.title("{0}\nDTW(x, y) = {1:.2f}".format('itakura', dtw_itakura),
fontsize=14)
# Dynamic Time Warping: multiscale
resolution, radius = 5, 2
dtw_multiscale, path_multiscale = dtw(