Matlab -- circshift函数用法

循环平移数组

语法

说明

Y = circshift(A,K) 循环将 A 中的元素平移 K 个位置。如果 K 为整数,则 circshift 沿大小不等于 1 的第一个 A 维度进行平移。如果 K 为整数向量,则每个 K 元素指示 A 的对应维度中的平移量。(示例

示例:

1. 平移列向量元素

创建一个数值列向量。

A = (1:10)'
A = 10×1

     1
     2
     3
     4
     5
     6
     7
     8
     9
    10

使用 circshift 将元素平移三个位置。

Y = circshift(A,3)
Y = 10×1

     8
     9
    10
     1
     2
     3
     4
     5
     6
     7

结果 Y 具有与 A 相同的元素,但元素的顺序不同。

2. 平移数组中的字符

创建字符数组并使用 circshift 将字符平移 3 个位置。Y 中的字符具有不同的顺序。

A = 'racecar';  
Y = circshift(A,3)
Y = 
'carrace'

3. 平移矩阵元素

创建一个左上角包含一块“1”的数值数组。

A = [1 1 0 0; 1 1 0 0; 0 0 0 0; 0 0 0 0]
A = 4×4

     1     1     0     0
     1     1     0     0
     0     0     0     0
     0     0     0     0

使用 circshift 将 A 的每一行向右平移一个位置。

Y = circshift(A,1,2)
Y = 4×4

     0     1     1     0
     0     1     1     0
     0     0     0     0
     0     0     0     0

 将 A 的元素在每个维度中平移一个位置。由“1”构成的群组现在处于矩阵的中心。

Y = circshift(A,[1 1])
Y = 4×4

     0     0     0     0
     0     1     1     0
     0     1     1     0
     0     0     0     0

要将群组恢复到其原始位置,请使用负平移值对 Y 执行 circshift。矩阵 X 等效于 A

X = circshift(Y,[-1 -1])
X = 4×4

     1     1     0     0
     1     1     0     0
     0     0     0     0
     0     0     0     0

输入参数

A - 输入数组
向量 | 矩阵 | 多维数组

输入数组,指定为向量、矩阵或多维数组。

数据类型: single | double | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64 | logical | char | string | struct | table | cell
复数支持: 是

K - 平移量
整数标量 | 整数向量

平移量,指定为整数标量或整数向量。

  • 如果您指定 K 为整数,但不指定 dim,则 circshift 将沿其大小不等于 1 的第一个维度平移。正 K 向维度末尾平移,负 K 向开头平移。

  • 如果将 K 指定为整数向量,则 K 中的第 N 个元素指定 A 中第 N 个维度的平移量。如果 K 中的第 N 个元素为正值,则 A 的值将向第 N 个维度的末尾平移。如果第 N 个元素为负值,则值向开头平移。

如果平移量大于 A 中对应维度的长度,则平移操作会绕回到该维度的开头。例如,将 3 元素向量平移 +3 个位置将使其元素重新回到其原始位置。

dim - 沿其运算的维度
正整数标量

沿其运算的维度,指定为正整数标量。如果未指定值,则默认值是大小不等于 1 的第一个维度。如果指定 dim,则 K 必须为整数标量。通常,指定 dim = 1 以交换行,指定 dim = 2 以交换列,等等。

 
例子:
a = [1 2 3;4 5 6;7 8 9];
b = [-1 -2 -3; -4 -5 -6;-7 -8 -9];
c = [10 20 30; 40 50 60; 70 80 90];
Hist(:,:,1) = a;
Hist(:,:,2) = b;
Hist(:,:,3) = c;

Hist_1 = circshift(Hist,[0,0,-1]);
Hist_2 = circshift(Hist,[1,0,0]);
Hist_3 = circshift(Hist,[0,1,0]);

Hist:

Hist_1:

Hist_2:

 Hist_3:

https://ww2.mathworks.cn/help/matlab/ref/circshift.html

https://my.oschina.net/u/4357988/blog/3347734

 
原文地址:https://www.cnblogs.com/zzzsj/p/14653417.html