Документация Engee

circshift

Сдвиг массива по кругу.

Библиотека

EngeeDSP

Синтаксис

Вызов функции

  • Y = circshift(A,K) — циклически сдвигает элементы массива A на K позиций. Если K — целое число, то circshift сдвигает элементы по первому измерению массива A, размер которого не равен 1. Если K — вектор целых чисел, то каждый элемент K указывает величину сдвига в соответствующем измерении массива A.

  • Y = circshift(A,K,dim) — циклически сдвигает значения массива A на K позиций по измерению dim. Входные данные K и dim должны быть скалярами.

Аргументы

Входные аргументы

# A — входной массив
вектор | матрица

Details

Входной массив, заданный как вектор или матрица.

Типы данных

Float32, Float64, Int8, Int16, Int32, Int64, UInt8, UInt16, UInt32, UInt64, Bool, Char, String

Поддержка комплексных чисел

Да

# K — величина сдвига
целочисленный скаляр | вектор целых чисел

Details

Величина сдвига, заданная как целочисленный скаляр или вектор целых чисел.

  • Если указать K как целое число и не указать dim, то circshift выполнит сдвиг по первому измерению, размер которого не равен 1. Положительное значение K сдвигает к концу измерения, а отрицательное — к началу.

  • Если указать K как вектор целых чисел, то -й элемент K задает величину сдвига для -го измерения в A. Если -й элемент в K положительный, то значения A сдвигаются к концу -го измерения. Если -й элемент в A отрицательный, то значения сдвигаются к началу.

Если величина сдвига больше длины соответствующего измерения в A, то сдвиг циклически переносится к началу этого измерения. Например, сдвиг трехэлементного вектора на +3 позиции возвращает его элементы в исходные позиции.

# dim — измерение, по которому выполняется операция
положительный целочисленный скаляр

Details

Измерение, по которому выполняется операция, заданное как положительный целочисленный скаляр. Если значение не указано, по умолчанию используется первое измерение, размер которого не равен 1. Если аргумент dim указан, то K должно быть целочисленным скаляром. В общем случае, для обмена строками укажите dim = 1, для обмена столбцами — dim = 2 и т.д.

Выходные аргументы

# Y — выходной массив
вектор | матрица

Details

Выходной массив, возвращаемый в виде вектора или матрицы.

Примеры

Сдвиг элементов вектора-столбца

Details

Создадим числовой вектор-столбец.

A = [1:10...]
10-element Vector{Int64}:
  1
  2
  3
  4
  5
  6
  7
  8
  9
 10

Используем circshift для сдвига элементов на три позиции.

import EngeeDSP.Functions: circshift

Y = circshift(A,3)
10-element Vector{Int64}:
  8
  9
 10
  1
  2
  3
  4
  5
  6
  7

Результат Y имеет те же элементы, что и A, но они расположены в другом порядке.

Сдвиг символов в массиве

Details

Создадим массив символов и используем функцию circshift для сдвига символов на 3 позиции. Символы находятся в другом порядке в Y.

import EngeeDSP.Functions: circshift

A = "racecar"
Y = circshift(A,3)
"carrace"

Сдвиг элементов матрицы

Details

Создадим числовой массив с кластером единиц в левом верхнем углу.

A = [1 1 0 0; 1 1 0 0; 0 0 0 0; 0 0 0 0]
4×4 Matrix{Int64}:
 1  1  0  0
 1  1  0  0
 0  0  0  0
 0  0  0  0

Используем circshift для сдвига каждого столбца A на одну позицию вправо.

import EngeeDSP.Functions: circshift

Y = circshift(A,1,2)
4×4 Matrix{Int64}:
 0  1  1  0
 0  1  1  0
 0  0  0  0
 0  0  0  0

Сдвинем элементы матрицы A на одну позицию в каждом измерении. Группа единиц теперь находится в центре матрицы.

Y = circshift(A,[1, 1])
4×4 Matrix{Int64}:
 0  0  0  0
 0  1  1  0
 0  1  1  0
 0  0  0  0

Чтобы вернуть кластер в исходное положение, используем функцию circshift для Y с отрицательными значениями сдвига. Матрица X эквивалентна матрице A.

X = circshift(Y,[-1, -1])
4×4 Matrix{Int64}:
 1  1  0  0
 1  1  0  0
 0  0  0  0
 0  0  0  0