circshift
Сдвиг массива по кругу.
| Библиотека |
|
Синтаксис
Вызов функции
-
Y = circshift(A,K)— циклически сдвигает элементы массиваAнаKпозиций. ЕслиK— целое число, тоcircshiftсдвигает элементы по первому измерению массиваA, размер которого не равен1. ЕслиK— вектор целых чисел, то каждый элементKуказывает величину сдвига в соответствующем измерении массиваA.
Аргументы
Входные аргументы
#
A —
входной массив
вектор | матрица
Details
Входной массив, заданный как вектор или матрица.
| Типы данных |
|
| Поддержка комплексных чисел |
Да |
#
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