circshift смещает по кругу элементы матрицы

## Синтаксис

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

## Аргументы

A, B

  векторы, матрицы, гиперматрицы любого обычного типа данных, структуры, cell-массивы, пользовательских типов. `B` имеет форму, размеры и тип `A`. Пользовательские типы применимы, при условии, что операторы `size()`, вставки и извлечения определены для типа переменной `A`.

shift

  уникальное положительное или отрицательное целое: сдвиг для применения к индексам вдоль первого неединичной размерности, или к линейным индексам элементов `A`, если в качестве третьего входного аргумента используется `0`.

shifts

  вектор положительных или отрицательных целых чисел: свдиги, которые применяются к диапазонам вдоль направлений, указанных в `dims` (или `1:length(shifts)` по умолчанию).

dims

  вектор целых чисел в диапазоне `[1, ndims(A)]`: указывает размерности `A`, вдоль которых, соответственно, должны применятся сдвиги `shifts`.

## Описание

`circshift(A, shift)` сдвигает вдоль первой размерности `A` размером > 1.

`circshift(A, shift, 0)` по кругу сдвигает элементы `A` на `shift` позиций.

`circshift(A, shifts)` по кругу сдвигает индексы строк `A` на `shifts(1)`, индексы столбцов `A` на `shifts(2)`, индексы слоёв `A` на `shifts(3)` и т.д.

`circshift(A, shifts, dims)` по кругу сдвигает `A` на `shifts(1)` вдоль её размерности №`dims(1)`, на `shifts(2)` вдоль её размерности №`dims(2)` и т.д.

## Примеры

    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.

С гиперматрицей текстов:

    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  !

С cell-массивом:

    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])

## Смотрите также

- flipdim
- fftshift

## История

6.1 Введена `circshift()`.