作者:zhouwenjun | 来源:互联网 | 2023-05-25 17:58
我有一个矢量,就像
x = [20 11 12 13 14 15 16 17 18 19]
我想将矢量值移位给定
if (i = 1)
X = [11 12 13 14 15 16 17 18 19 20]
if (i = 2)
X = [12 13 14 15 16 17 18 19 20 11]
if (i = 3)
X = [13 14 15 16 17 18 19 20 11 12]
目前我正在使用for
循环来执行此操作,但这需要花费很多时间
x = [20 11 12 13 14 15 16 17 18 19];
in = x;
C1 = x;
for lt = 1:1:length(in)
C1 = x ;
if (lt > 1)
for tt = 1:1:lt-1
swap = C1(1);
for pt = 1:1:length(in)-1
C1(pt) = C1(pt+1);
end
C1(length(in)) = swap;
end
end
disp(C1);
end
有人可以建议我更快的算法吗?
1> Luis Mendo..:
让我们s
表示你要转移的职位数量.你可以使用circshift
:
x_shifted = circshift(x, [1 -s]);
第二个参数是[1 -s]
因为要调换s
位置的左边的第二维(列).
您也可以手动执行以下操作mod
:
x_shifted = x(mod((1:numel(x))+s-1, numel(x))+1);