如何在MATLAB中将矩阵中的列移到右边?

时间:2015-10-03 22:16:11

标签: matlab matrix

Given the following Problem:我怎样才能做到这一点?我试图将列向右移动,但我只能让它们向左移动。我也无法说明最后一列被转移到前面。我知道我需要使用某种临时数组,但我不知道如何实现它。

到目前为止我的代码:

function [B] = column_shift()

A = input('Enter an nx6 matrix: ')
interimA = A(:,6);
    for n = 1:5
        A(:,n) = A(:,n+1);
        interimA = A(:,1);

    end
B = A
end

2 个答案:

答案 0 :(得分:3)

您可以使用circshift

%# shift by 1 along dimension 2
shiftedA = circshift(A,1,2);

注意:CIRCSHIFT已更改其定义。早期版本的Matlab只使用了一个输入参数,因此您必须编写circshift(A,[0,1])(沿第一个移位0,沿第二维移位1)以获得与上述相同的结果。

如果您确实需要使用for循环,则可以执行以下操作:

shiftStep = 1;
%# create an index array with the shifted column indices
nCols = size(A,2);
shiftedIndices = circshift(1:nCols,shiftStep,2);

shiftedA = A; %# initialize the output to the same size as the input

%# for-loop could be replaced by shiftedA = A(:,shiftedIndices);
for iCol = 1:nCols
    shiftedA(:,iCol) = A(:,iCol==shiftedIndices);
end

答案 1 :(得分:0)

我已经修改并评论了您的代码版本。希望能帮助到你! 只是几点说明:

当你用n-1移动时,你正在将列移到左边,因为你正在用n + 1列移动。

最后一列是在for循环之前处理的特殊情况(如果你真的需要在for循环中做所有事情,你可以在n = 1开始循环,检查循环是否在第一个循环中列,并处理那里的“特殊转移”。

你真的不需要临时数组。你可以创建一个,如果它可以帮助你使代码更容易理解,但在这种情况下我没有使用过。

function [B] = column_shift()

A = input('Enter an nx6 matrix: ')
B = A;
B(:,1) = A(:,end);              %copy the last column of A to the first column of B
    for n = 2 : size(A,2)       %starting on the second column of A, until the last column...
        B(:,n) = A(:,n-1);      %copy the column "n-1" on A to the column "n" in B
    end
end