torch.nn.CircularPad1d
class CircularPad1d extends Modulenew CircularPad1d(padding: Padding1D)
- readonly
padding([number, number])
1D circular padding: pads by wrapping around (periodic boundary).
Treats signal as periodic: left padding wraps from right end, right padding wraps from left. Creates seamless wraparound without reflection or repetition. Essential for:
- Periodic signals (cyclical time series, angles)
- FFT-based processing (expects periodic data)
- Signals with natural circular symmetry
- Avoiding boundary effects in Fourier domain operations
Circular padding wraps: input [a, b, c] with padding=2 becomes [b, c | a, b, c | a, b].
When to use CircularPad1d:
- Periodic/cyclical signals (daily patterns, seasonal data)
- FFT preprocessing (assumes periodic extension)
- Angular data (directions repeat every 2π)
- Signals with natural wraparound
Trade-offs:
- vs ReflectionPad: Circular for periodic; reflection for non-periodic
- vs ZeroPad: Circular smooth wraparound; zero creates discontinuity
- Computation: Wrap-around indexing (simple)
- Gradient: Gradients wrap around at boundaries
- True periodic: Wraps end-to-start without repetition
- FFT-compatible: Works naturally with Fourier transform
- Symmetric boundary: Left and right connect smoothly
- Gradient wraps: Backprop includes wraparound effects
- Only for periodic data: Don't use for non-periodic signals
- Assumes continuity: Expects signal naturally continues
Examples
// Periodic signal padding
const pad = new torch.nn.CircularPad1d(2);
const signal = torch.tensor([[[1, 2, 3, 4, 5]]]);
const padded = pad.forward(signal);
// Input: [1, 2, 3, 4, 5]
// Output: [4, 5, 1, 2, 3, 4, 5, 1, 2] (wraps around)// Time series with daily cycle
const pad = new torch.nn.CircularPad1d(24); // Pad with one day cycle
const hourly = torch.randn([32, 1, 336]); // 2 weeks hourly data
const padded = pad.forward(hourly); // Smooth periodic extension