如何在Matlab中使用for循环移位数组元素?

时间:2013-02-13 15:09:24

标签: matlab

我试图将数组的所有元素移到左边,这样第一个元素就会成为最后一个元素,第二个元素成为第一个元素,第三个成为第二个元素,等等。我知道{{1命令,但我想使用for循环。

这就是我的所作所为。

circshift

但它当然没有用。我无法计算出n个元素的数组,而没有指定n,这就是我使用old = []的原因,但我认为它创建了一个包含0个元素的数组。

如何使此代码有效?

2 个答案:

答案 0 :(得分:2)

所以你的第一步是学习如何指定for loop in Matlab,你有什么就像C语法。这根本不是Matlab语法。

以下是使用forloops的方法,但这不是很好的matlab编程。你也可以在没有循环的情况下轻松完成。

vec = 1:10;
temp = [];
shiftby = 2;

for ii = 1:shiftby %Each iteration shifts by one
    temp = vec(end); %Store the last element of vec
    for jj = size(vec, 2):-1:2; %inner loop must shift each element from the end to element 2
        vec(jj) = vec(jj-1);
    end
    vec(1) = temp; %put the old end value at the beginning
end  

但你也可以这样做,这是一种更加Matlabesque的编码方式:

vec = [vec(end - shiftby + 1: end), vec(1:end - shiftby)]

答案 1 :(得分:2)

如果要避免指定数组的n长度,则必须将其作为函数中的输入参数。 例如,您可以执行以下操作:

function new = shiftLeft(old)
n = length(old);

for i =1:n
new(i) = old(mod(i,n)+1);
end

return

所以对于这个,如果你有一个例如old = [1 2 3 4];的数组,你可以获得像new = [2 3 4 1];

这样的数组

mod(a,b)modulo运算符,如果您键入help mod,可以找到更多信息。