我有一个数组,我想用一个已知索引集合中的值替换它前面的值。例如,我的数组可能是
x = [1, 2, 3, 4, 5, 6, 7, 8, 9, 0];
并且要由先前值替换的值的索引可能是
y = [2, 3, 8];
我希望这个替换从左到右发生,否则从头到尾。也就是说,索引2处的值应替换为索引1处的值,之前索引3处的值替换为索引2处的值。使用上述数组的结果应为
[1, 1, 1, 4, 5, 6, 7, 7, 9, 0]
但是,如果我使用明显的方法在Matlab中实现这一点,我的结果是
>> x(y) = x(y-1)
x =
1 1 2 4 5 6 7 7 9 0
希望你可以看到这个操作是从右到左执行的,索引3的值被索引2的值替换,然后2被1替换。
我的问题是:有没有办法以一种简单的方式实现我想要的结果,没有强力循环阵列或做一些耗时的事情,比如反转阵列?
答案 0 :(得分:7)
嗯,实际上这是一个循环,但顺序是连续索引元素的数量
while ~isequal(x(y),x(y-1))
x(y)=x(y-1)
end
答案 1 :(得分:4)