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
答案 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