scipy/doc/source/tutorial/examples/plot_boundary_modes.py

Ignoring revisions in .git-blame-ignore-revs. Click here to bypass and see the normal blame view.

54 lines
1.7 KiB
Python
Raw Permalink Normal View History

import numpy as np
import matplotlib.pyplot as plt
from scipy import ndimage
img = np.array([-2, -1, 0, 1, 2], float)
x = np.linspace(-2, 6, num=1000)
modes = ['constant', 'grid-constant', 'nearest', 'reflect', 'mirror', 'wrap',
'grid-wrap']
fig, axes = plt.subplots(len(modes), 3, figsize=(11, 8), sharex=True,
sharey=True)
for mode, (ax0, ax1, ax2) in zip(modes, axes):
y = ndimage.map_coordinates(img, [x], order=0, mode=mode)
ax0.scatter(np.arange(img.size), img)
ax0.plot(x, y, '-')
ax0.set_title(f'mode={mode}, order=0')
y2 = ndimage.map_coordinates(img, [x], order=1, mode=mode)
ax1.scatter(np.arange(img.size), img)
ax1.plot(x, y2, '-')
ax1.set_title(f'mode={mode}, order=1')
y3 = ndimage.map_coordinates(img, [x], order=3, mode=mode)
ax2.scatter(np.arange(img.size), img)
ax2.plot(x, y3, '-')
ax2.set_title(f'mode={mode}, order=3')
sz = len(img)
for ax in (ax0, ax1, ax2):
if mode in ['grid-wrap', 'reflect']:
ax.plot([-0.5, -0.5], [-2.5, 2.5], 'k--')
ax.plot([sz - 0.5, sz - 0.5], [-2.5, 2.5], 'k--')
elif mode in ['wrap', 'mirror']:
ax.plot([0, 0], [-2.5, 2.5], 'k--')
ax.plot([sz - 1, sz - 1], [-2.5, 2.5], 'k--')
if mode != 'constant':
for xx in range(int(x[0]), int(x[-1] + 1)):
if (xx < 0) or (xx > img.size - 1):
idx = np.argmin(np.abs(x - xx))
for y_vals, ax in zip((y, y2, y3), (ax0, ax1, ax2)):
ax.scatter(
[x[idx]], [y_vals[idx]], facecolors='none',
edgecolor='#0343df', marker='o'
)
plt.tight_layout()
plt.show()