首页 > 解决方案 > 如何以不同的增量进行非循环移位?

问题描述

我有一个 100x100 数组(A),我试图弄清楚如何以不同的增量非循环地将它们向右移动。例如,我希望第 1 行不移动,第 2 行移动 10,第 3 行移动 20,第 4 行移动 30,第 5 行移动 40,并让它每 5 行重复一次这个过程。我怎样才能做到这一点?

A = rand(100,100);
Shift_Factor = ?;
Fill_Value = 0;
[Number_Of_Rows,Number_Of_Columns] = size(A);
A = [A zeros(Number_Of_Rows,Shift_Factor)];
for Row = 1:  Number_Of_Rows
    A(Row,:) = [Fill_Value*ones(1,Shift_Factor) A(Row,1:end-Shift_Factor)];
end

我试过设置Shift_Factor to [0,10,20,30,40],但也没有用

标签: arraysmatlabmatrix

解决方案


我假设这是将相应的行向右移动。外部 for 循环以 5 为一组遍历行块。内部 for 循环从 0 迭代到 4 并创建一个变量,该变量Row计算相对于Target_Groupand的目标行Relative_Row。有Shift_Value要使用的是相对于计算的Relative_Row

A = rand(100,100);
Fill_Value = 0;

for Target_Group = 1: +5: length(A)
    
    for Relative_Row = 0: 4
        Row = Target_Group+Relative_Row;
        Shift_Value = Relative_Row*10;
        A(Row,:) = [Fill_Value*ones(1,Shift_Value) A(Row,1:end-Shift_Value)];
    end
    
end

推荐阅读