如何在 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
我正在尝试在 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