0

我正在尝试将数组的所有元素向左移动,以便第一个元素成为最后一个元素,第二个成为第一个,第三个成为第二个,等等。我知道circshift命令,但我想使用 for 循环来做到这一点。

这就是我所做的。

old=[]
n=length(old)
for i=1;i<(n-1);i=i+1;
    for j=2;j<n;j=j+1;
        new(j)=old(i)
    end
end 

但它当然没有用。我在不指定 n 的情况下制作一个包含 n 个元素的数组时遇到了麻烦,这就是我使用 old=[] 的原因,但我认为这创建了一个包含 0 个元素的数组。

我怎样才能使这段代码工作?

4

2 回答 2

2

所以你的第一步是学习如何在 Matlab 中指定一个 for 循环,你所拥有的就像 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)]
于 2013-02-13T15:25:04.037 回答
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)运算符,如果您键入 ,您可以找到更多信息help mod

于 2013-02-13T15:26:34.160 回答