我有一个向量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
长度的矢量。
答案 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) ];