【问题标题】:How can I perform this non circular shift in Matlab? [closed]如何在 Matlab 中执行这种非循环移位? [关闭]
【发布时间】:2020-11-23 21:45:00
【问题描述】:

我正在尝试在 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 的期望输出。我不小心遗漏了一些元素。试图将变量非循环向右移动

【问题讨论】:

  • 对于矩阵 B 的预期输出,第 3 行的行为是什么,它似乎没有遵循其他转变的趋势?
  • 这是一个漂亮的期望输出,但它在计算机内存方面毫无意义。如果您使用的是矩阵,甚至没有输入!
  • 对不起,我错过了一些整数。目的是将矩阵 B 的偶数行向右移动两次。我修复了输出并添加了详细信息

标签: matlab matrix shift


【解决方案1】:

使用索引和连接

输入数组:

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];

向左移动偶数行:

要移动数组,您可以在这种情况下 2 相对于 Shift_Factor 对数组进行索引。您也可以使用 circshift() 并用零/所需的 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 运行

【讨论】:

  • 抱歉,我编辑了 B 数组,因为我缺少一些值。这更清楚了吗?
  • 不用担心,是的,虽然这是一个小错字。我现在编辑我的相应答案。
猜你喜欢
  • 2021-03-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-04-07
  • 1970-01-01
  • 2023-04-08
  • 2021-11-22
相关资源
最近更新 更多