循环移动矢量

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)

有人可以建议我更快的算法吗?

Lui*_*ndo 5

让我们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)