## Documentation Center |

Shift data to operate on specified dimension

`[x,perm,nshifts] = shiftdata(x,dim)`

`[x,perm,nshifts] = shiftdata(x,dim)` shifts
data `x` to permute dimension `dim` to
the first column using the same permutation as the built-in `filter` function.
The vector `perm` returns the permutation vector
that is used.

If `dim` is missing or empty, then the first
non-singleton dimension is shifted to the first column, and the number
of shifts is returned in `nshifts`.

`shiftdata` is meant to be used in tandem with `unshiftdata`,
which shifts the data back to its original shape. These functions
are useful for creating functions that work along a certain dimension,
like `filter`, `goertzel`, `sgolayfilt`,
and `sosfilt`.

This example shifts `x`, a 3-x-3 magic square,
permuting dimension `2` to the first column. `unshiftdata` shifts `x` back
to its original shape.

1. Create a 3-x-3 magic square:

x = fi(magic(3)) x = 8 1 6 3 5 7 4 9 2

2. Shift the matrix `x` to work along the second
dimension:

[x,perm,nshifts] = shiftdata(x,2)

The permutation vector, `perm`, and the number
of shifts, `nshifts`, are returned along with the
shifted matrix, `x`:

x = 8 3 4 1 5 9 6 7 2 perm = 2 1 nshifts = []

3. Shift the matrix back to its original shape:

y = unshiftdata(x,perm,nshifts) y = 8 1 6 3 5 7 4 9 2

This example shows how `shiftdata` and `unshiftdata` work
when you define `dim` as empty.

1. Define `x` as a row vector:

x = 1:5 x = 1 2 3 4 5

2. Define `dim` as empty to shift the first
non-singleton dimension of `x` to the first column:

[x,perm,nshifts] = shiftdata(x,[])

`x` is returned as a column vector, along with `perm`,
the permutation vector, and `nshifts`, the number
of shifts:

x = 1 2 3 4 5 perm = [] nshifts = 1

3. Using `unshiftdata`, restore `x` to
its original shape:

y = unshiftdata(x,perm,nshifts) y = 1 2 3 4 5

Was this topic helpful?