Scilab Website | Contribute with GitLab | Mailing list archives | ATOMS toolboxes
Scilab Online Help
2024.0.0 - English


circshift

circularly shifts elements or subarrays of an array (regular, of structures, cells, custom)

Syntax

B = circshift(A, shift)
B = circshift(A, shift, 0)
B = circshift(A, shifts)
B = circshift(A, shifts, dims)

Arguments

A, B

row, column, matrix or 2D array, hypermatrix or ND-array of any number of dimensions and of any sizes. B has the shape, sizes and type of A. Custom types are accepted provided that size(), insertion, and extraction operators are defined for A's type.

shift

unique positive or negative integer: the shift to apply to indices along the first non-singleton dimension, or to linear indices of A components if 0 is used as third input argument.

shifts

vector of positive or negative integers: shifts to apply on ranges along directions specified in dims (or 1:length(shifts) by default).

dims

Vector of integers in [1, ndims(A)]: indices of A dimensions along which the respective shifts must be performed.

Description

circshift(A, shift) shifts along the first dimension of A of size > 1.

circshift(A, shift, 0) circularly shifts A components by shift positions.

circshift(A, shifts) circularly shifts indices of A rows by shifts(1), indices of A columns by shifts(2), indices of A layers by shifts(3), etc.

circshift(A, shifts, dims) circularly shifts A by shifts(1) along its dimension #dims(1), by shifts(2) along its dimension #dims(2), etc.

Examples

circshift(1:7, 2)
circshift(1:7, -1)
--> circshift(1:7, 2)
 ans  =
   6.   7.   1.   2.   3.   4.   5.

--> circshift(1:7, -1)
 ans  =
   2.   3.   4.   5.   6.   7.   1.

M = matrix(1:12, 3, 4)
circshift(M, 1)
circshift(M, 1, 2)
circshift(M, [-1 1])
circshift(M, [-2 1], [2 1])
--> M = matrix(1:12, 3, 4)
 M  =
   1.   4.   7.   10.
   2.   5.   8.   11.
   3.   6.   9.   12.

--> circshift(M, 1)
 ans  =
   3.   6.   9.   12.
   1.   4.   7.   10.
   2.   5.   8.   11.

--> circshift(M, 1, 2)
 ans  =
   10.   1.   4.   7.
   11.   2.   5.   8.
   12.   3.   6.   9.

--> circshift(M, [-1 1])
 ans  =
   11.   2.   5.   8.
   12.   3.   6.   9.
   10.   1.   4.   7.

--> circshift(M, [-2 1], [2 1])
 ans  =
   9.   12.   3.   6.
   7.   10.   1.   4.
   8.   11.   2.   5.

M = matrix(1:12, 3, 4)
circshift(M, 5, 0)
--> circshift(M, 5, 0)
 ans  =
   8.    11.   2.   5.
   9.    12.   3.   6.
   10.   1.    4.   7.

With an hypermatrix of texts:

t = matrix([string(1:12) strsplit("a":"l")' strsplit("A":"L")'],3,4,3)
circshift(t, 1, 0)
circshift(t, 1)
circshift(t, 1, 3)
circshift(t, [1 -1], [2 3])
--> t = matrix([string(1:12) strsplit("a":"l")' strsplit("A":"L")'],3,4,3)
 t  =
(:,:,1)
!1  4  7  10  !
!2  5  8  11  !
!3  6  9  12  !

(:,:,2)
!a  d  g  j  !
!b  e  h  k  !
!c  f  i  l  !

(:,:,3)
!A  D  G  J  !
!B  E  H  K  !
!C  F  I  L  !

--> circshift(t, 1, 0)
 ans  =
(:,:,1)
!L  3  6  9   !
!1  4  7  10  !
!2  5  8  11  !

(:,:,2)
!12  c  f  i  !
!a   d  g  j  !
!b   e  h  k  !

(:,:,3)
!l  C  F  I  !
!A  D  G  J  !
!B  E  H  K  !

--> circshift(t, 1)
 ans  =
(:,:,1)
!3  6  9  12  !
!1  4  7  10  !
!2  5  8  11  !

(:,:,2)
!c  f  i  l  !
!a  d  g  j  !
!b  e  h  k  !

(:,:,3)
!C  F  I  L  !
!A  D  G  J  !
!B  E  H  K  !

--> circshift(t, 1, 3)
 ans  =
(:,:,1)
!A  D  G  J  !
!B  E  H  K  !
!C  F  I  L  !

(:,:,2)
!1  4  7  10  !
!2  5  8  11  !
!3  6  9  12  !

(:,:,3)
!a  d  g  j  !
!b  e  h  k  !
!c  f  i  l  !

--> circshift(t, [1 -1], [2 3])
 ans  =
(:,:,1)
!j  a  d  g  !
!k  b  e  h  !
!l  c  f  i  !

(:,:,2)
!J  A  D  G  !
!K  B  E  H  !
!L  C  F  I  !

(:,:,3)
!10  1  4  7  !
!11  2  5  8  !
!12  3  6  9  !

With an array of cells:

L = list(1,%t);
C = {%f "a" %i  %z
     %t "b" %e  %s
      0 "c" %pi L }
circshift(C, 1, 0)
circshift(C, 1)
circshift(C, 1, 2)
circshift(C, [1 -1])

See also

  • flipdim — reverses the order of (blocks of) rows, columns, pages.. of an array
  • fftshift — rearranges the fft output, moving the zero frequency to the center of the spectrum

History

VersionDescription
6.1 circshift() introduced.
Report an issue
<< cat Matrix - shaping flipdim >>

Copyright (c) 2022-2024 (Dassault Systèmes)
Copyright (c) 2017-2022 (ESI Group)
Copyright (c) 2011-2017 (Scilab Enterprises)
Copyright (c) 1989-2012 (INRIA)
Copyright (c) 1989-2007 (ENPC)
with contributors
Last updated:
Tue Oct 24 14:30:03 CEST 2023