查找具有不同值的最新索引

时间:2015-06-10 18:34:44

标签: matlab

我熟悉Matlab,但我的直觉中仍然存在矢量化方法的问题,所以我想知道是否有人可以证明他们如何处理这个问题。

我有一个数组,例如A = [1 1 2 2 1 3 3 3 4 3 4 4 5]

我想返回一个数组B,这样每个元素都是A最近'的索引。元素与前一个元素的值不同。

因此,对于我们的数组AB将等于[x x 2 2 4 5 5 5 8 9 10 10 12],其中x可以是您喜欢的任何一致值,因为之前的索引没有满足这些特征

我知道如何将其编码为for - 循环,并且我打赌for循环可能更快,但是任何人都可以将其矢量化为比for循环更快吗?

这是我的for - 循环:

prev=0;  
B=zeros(length(A),1);  
for i=2:length(A)  
  if A(i-1)~=A(i)  
    prev=i-1;  
  end  
  B(i)=prev;  
end

1 个答案:

答案 0 :(得分:2)

查找值更改的条目的索引:

ind = find(diff(A) ~= 0);

因此,B中应显示的值为:

val = [0 ind];

构建diff的{​​{1}}:填写应出现在正确位置的值之间的差异:

B

现在使用Bd = zeros(size(B))'; Bd(ind + 1) = diff(val); 构建cumsum

B

不确定这是否会导致加速。