创建两个向量,这些向量移动到给定向量的右侧,但用零填充左侧条目

时间:2016-01-25 17:13:17

标签: matlab vector

我有一个向量x = [1 2 4 2 -1 3],我需要一个向量y = [0 1 2 4 2 -1]和一个向量z = [0 0 1 2 4 2],所以它与x的长度相同但在y中,元素移动了一个,在z中,元素被移动了两个,依此类推。其他向量。

我尝试过:

x = [1 2 4 2 -1 3];         
y = [0, repmat(x,1)]

问题是,这样我有一个长度为length(x)+1的向量,我不想要最后一个元素。我尝试过:

y = [0,repmat(x,1)- x(length(x))]     

并且我已经解决了最后一个元素的问题,但我不想得到0.我只想要我的x长度的矢量。

3 个答案:

答案 0 :(得分:4)

x = [1 2 4 2 -1 3];         
y = [0, x];
y = y(1:end-1);
z = [0, y];
z = z(1:end-1);

使用end语句选择向量中的最后一个元素,然后从那里移回一个元素,将数组缩短一个。此外,您对repmat的调用是多余的,因为您只需调用矢量本身。

答案 1 :(得分:3)

如果你不想搞砸索引,我有一个技巧就是将filter[0 1]内核一起使用。内核中的前导0很重要,因为它确保输出中的第一个系数为零,然后简单地将所有元素的一个元素向右复制延迟。 filter的额外好处是它确保输出与输入的长度相同。

您可以使用此输出并在中间结果filter上再次应用y,或再次使用[0 0 1]上的内核x来获得最后一个结果{{1 }}:

z

答案 2 :(得分:0)

x = [ 1 2 4 2 -1 3 ];
y = [ 0 x(1:end-1) ];
z = [ 0 0 x(1:end-2) ];