如何在 Matlab 中执行此非循环移位?

How can I perform this non circular shift in Matlab?

我正在尝试在 MATLAB 中执行非循环移位。我有

A = [1 2 3 4 5; 0 0 13 14 15; 21 22 23 24 25; 0 0 33 34 35 ; 41 42 43 44 45]

B = [1 2 3 4 5; 11 12 13 14 15; 21 22 23 24 25; 31 32 33 34 35 ; 41 42 43 44 45]

如何移动偶数行的索引,是否可以用选择的整数填充空索引?

期望的输出:

 A = 
     1     2    3      4      5  
     13    14   15           
     21    22   23     24     25
     33    34   35           
     41    42   43     44     45

B = 
         1     2    3     4     5  
                    11    12    13    14    15           
         21    22   23    24    25
                    31    32    33    34    35      
         41    42   43    44    45

编辑:意识到我弄乱了矩阵 B 的预期输出。我不小心遗漏了一些元素。尝试将变量非循环地向右移动

使用索引和连接

输入数组:

A = [1  2  3  4  5; 
     0  0  13 14 15; 
     21 22 23 24 25;
     0  0  33 34 35 ; 
     41 42 43 44 45];


B = [1  2  3  4  5; 
     11 12 13 14 15; 
     21 22 23 24 25; 
     31 32 33 34 35;
     41 42 43 44 45];

向左移动偶数行:

要移动数组,在这种情况下,您可以相对于 Shift_Factor 对数组进行索引 2。您也可以使用 circshift() 并用所需的 zeroes/the 覆盖数组的部分Fill_Value。这里使用增量值为 2 的 for 循环遍历所有偶数行。每次迭代时,数组 A(Row,Shift_Factor+1:end) 的一个分区连接到任意填充数组 Fill_Value*ones(1,Shift_Factor).

Shift_Factor = 2;
Fill_Value = 0;

[Number_Of_Rows,Number_Of_Columns] = size(A);

for Row = 2: +2: Number_Of_Rows
    A(Row,:) = [A(Row,Shift_Factor+1:end) Fill_Value*ones(1,Shift_Factor)];
end

A


右移偶数行

Shift_Factor = 2;
Fill_Value = 0;

[Number_Of_Rows,Number_Of_Columns] = size(B);
B = [B zeros(Number_Of_Rows,Shift_Factor)];

for Row = 2: +2: Number_Of_Rows
    B(Row,:) = [Fill_Value*ones(1,Shift_Factor) B(Row,1:end-Shift_Factor)];
end


B

运行 使用 MATLAB R2019b