我试图将数组的所有元素移到左边,这样第一个元素就会成为最后一个元素,第二个元素成为第一个元素,第三个成为第二个元素,等等。我知道{{1命令,但我想使用for循环。
这就是我的所作所为。
circshift
但它当然没有用。我无法计算出n个元素的数组,而没有指定n,这就是我使用old = []的原因,但我认为它创建了一个包含0个元素的数组。
如何使此代码有效?
答案 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
,可以找到更多信息。