Bow*_*Bow 3 arrays performance matlab vector matrix
我有一个矢量,就像
x = [20 11 12 13 14 15 16 17 18 19]
Run Code Online (Sandbox Code Playgroud)
我想将矢量值移位给定
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]
Run Code Online (Sandbox Code Playgroud)
目前我正在使用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
Run Code Online (Sandbox Code Playgroud)
有人可以建议我更快的算法吗?
让我们s表示你要转移的职位数量.你可以使用circshift:
x_shifted = circshift(x, [1 -s]);
Run Code Online (Sandbox Code Playgroud)
第二个参数是[1 -s]因为要调换s位置的左边的第二维(列).
您也可以手动执行以下操作mod:
x_shifted = x(mod((1:numel(x))+s-1, numel(x))+1);
Run Code Online (Sandbox Code Playgroud)