矢量化Matlab从头到尾替换数组值

zep*_*hyr 2 arrays matlab vectorization indices

我有一个数组,我想在一个已知的索引集合中替换其前面的值.举个例子,我的数组可能是

x = [1, 2, 3, 4, 5, 6, 7, 8, 9, 0];
Run Code Online (Sandbox Code Playgroud)

并且要被先前值替换的值的索引可能是

y = [2, 3, 8];
Run Code Online (Sandbox Code Playgroud)

我希望这个替换从左到右发生,或者从头到尾发生.也就是说,索引2处的值应该被索引1处的值替换,之后索引3处的值将被索引2处的值替换.使用上面的数组的结果应该是

[1, 1, 1, 4, 5, 6, 7, 7, 9, 0]
Run Code Online (Sandbox Code Playgroud)

但是,如果我使用明显的方法在Matlab中实现这一点,我的结果是

>> x(y) = x(y-1)

x =

     1     1     2     4     5     6     7     7     9     0
Run Code Online (Sandbox Code Playgroud)

希望您可以看到此操作从右到左执行,索引3处的值替换为索引2处的值,然后将2替换为1.

我的问题是:有没有办法以一种简单的方式实现我想要的结果,没有蛮力循环阵列或做一些耗时的事情,比如反转阵列?

kar*_*kfa 7

嗯,实际上这是一个循环,但顺序是连续索引元素的数量

while ~isequal(x(y),x(y-1))
  x(y)=x(y-1)
end
Run Code Online (Sandbox Code Playgroud)